feat(test-app): refactor to Vue 3 + Vite + vue-facing-decorator architecture

Complete refactoring of android-test app to modern Vue 3 stack:

## 🚀 New Architecture
- Vue 3 with Composition API and TypeScript
- Vite for fast development and building
- vue-facing-decorator for class-based components
- Pinia for reactive state management
- Vue Router for navigation
- Modern glassmorphism UI design

## 📱 App Structure
- Comprehensive component library (cards, items, layout, ui)
- Pinia stores for app and notification state management
- Full view system (Home, Schedule, Notifications, Status, History)
- Responsive design for mobile and desktop
- TypeScript throughout with proper type definitions

## 🎨 Features
- Dashboard with quick actions and status overview
- Schedule notifications with time picker and options
- Notification management with cancel functionality
- System status with permission checks and diagnostics
- Notification history with delivery tracking
- Settings panel (placeholder for future features)

## 🔧 Technical Implementation
- Class-based Vue components using vue-facing-decorator
- Reactive Pinia stores with proper TypeScript types
- Capacitor integration for native Android functionality
- ESLint and TypeScript configuration
- Vite build system with proper aliases and optimization

## 📚 Documentation
- Comprehensive README with setup and usage instructions
- Component documentation and examples
- Development and production build instructions
- Testing and debugging guidelines

This creates a production-ready test app that closely mirrors the actual
TimeSafari app architecture, making it ideal for plugin testing and
demonstration purposes.
This commit is contained in:
Matthew Raymer
2025-10-15 06:09:18 +00:00
parent 49fd1dfedf
commit 6213235a16
31 changed files with 4575 additions and 25 deletions

View File

@@ -0,0 +1,100 @@
/**
* Vue Router Configuration
*
* @author Matthew Raymer
* @version 1.0.0
*/
import { createRouter, createWebHistory } from 'vue-router'
import type { RouteRecordRaw } from 'vue-router'
const routes: RouteRecordRaw[] = [
{
path: '/',
name: 'Home',
component: () => import('@/views/HomeView.vue'),
meta: {
title: 'Daily Notification Test',
requiresAuth: false
}
},
{
path: '/notifications',
name: 'Notifications',
component: () => import('@/views/NotificationsView.vue'),
meta: {
title: 'Notification Management',
requiresAuth: false
}
},
{
path: '/schedule',
name: 'Schedule',
component: () => import('@/views/ScheduleView.vue'),
meta: {
title: 'Schedule Notification',
requiresAuth: false
}
},
{
path: '/status',
name: 'Status',
component: () => import('@/views/StatusView.vue'),
meta: {
title: 'System Status',
requiresAuth: false
}
},
{
path: '/history',
name: 'History',
component: () => import('@/views/HistoryView.vue'),
meta: {
title: 'Notification History',
requiresAuth: false
}
},
{
path: '/settings',
name: 'Settings',
component: () => import('@/views/SettingsView.vue'),
meta: {
title: 'Settings',
requiresAuth: false
}
},
{
path: '/:pathMatch(.*)*',
name: 'NotFound',
component: () => import('@/views/NotFoundView.vue'),
meta: {
title: 'Page Not Found',
requiresAuth: false
}
}
]
const router = createRouter({
history: createWebHistory(),
routes
})
// Global navigation guards
router.beforeEach((to, from, next) => {
// Set page title
if (to.meta?.title) {
document.title = `${to.meta.title} - Daily Notification Test`
}
// Add loading state
console.log(`🔄 Navigating from ${from.name || 'unknown'} to ${to.name || 'unknown'}`)
next()
})
router.afterEach((to, from) => {
// Clear any previous errors on successful navigation
console.log(`✅ Navigation completed: ${to.name || 'unknown'}`)
})
export default router