How abineshkumarr/synora works
Purpose and Runtime
Synora is a desktop-first productivity workspace organized around boards, notes, calendar, habits, and dashboard views. It is a browser SPA built with React-style JSX and Vite entry infrastructure: src/main.jsx, src/App.jsx, and vite.config.js. Current persistence is local browser storage; no backend, authentication, cloud sync, or external API integration is represented in the repository.
Application Composition and Navigation
App is the top-level application assembly point, while the shared shell separates persistent navigation from feature workspaces. Layout components provide the sidebar, top bar, breadcrumbs, and content workspace: src/components/layout/Layout.jsx, src/components/layout/Sidebar.jsx, and src/components/layout/Workspace.jsx. Navigation destinations are centrally defined in src/constants/navigation.js, creating a boundary between global navigation structure and page implementations.
Global State and UI Interaction
Application-wide state is exposed through a React context/provider layer: src/context/AppContext.jsx, src/context/AppProvider.jsx, and src/hooks/useApp.js. Feature and layout consumers should use this abstraction rather than directly coupling to storage or top-level state. Reusable interaction hooks support workspace selection, modal behavior, debouncing, and local storage access, notably src/hooks/useWorkspace.js, src/hooks/useModal.js, and src/hooks/useLocalStorage.js.
Persistence, Validation, and Domain Services
Storage is a distinct client-side data boundary. src/storage/storageService.js owns persistence access, src/storage/validationService.js validates stored data, and src/storage/migrationService.js supports schema evolution for existing local data. Domain-facing operations are separated into src/services/boardService.js and src/services/noteService.js; pages and components should route board/note mutations through these services instead of directly managing persisted records.
Feature Workspaces
Boards are the core established product area, represented by the board landing view and a board-specific workspace: src/pages/Boards/Boards.jsx and src/pages/Boards/BoardWorkspace.jsx. Other top-level productivity domains are isolated as pages—src/pages/Notes/Notes.jsx, src/pages/Calendar/Calendar.jsx, and src/pages/Habits/Habits.jsx—allowing their future implementation to share the application shell and state/storage boundaries without tightly coupling their UI.
Dashboard Aggregation
The dashboard is an aggregation surface rather than an independent data domain. src/pages/Dashboard/Dashboard.jsx composes a grid and header from src/pages/Dashboard/components/DashboardGrid/DashboardGrid.jsx and src/pages/Dashboard/components/DashboardHeader/DashboardHeader.jsx, then renders focused widgets such as tasks, recent boards/notes, calendar preview, habits, and deadlines. These widgets should consume existing domain data through services/context, not establish parallel persistence.
Styling and Cross-Cutting Utilities
Global visual foundations and shell styling are kept separate from feature-local styles in src/styles/globals.css, src/styles/layout.css, and src/styles/variables.css. Shared non-UI logic for identifiers, dates, constants, and validation resides in src/utils/ids.js, src/utils/dates.js, and src/utils/validation.js. The principal control flow is: browser entry → app/provider → shared layout/navigation → selected workspace/page → domain service → validated/migrated local storage.
Main entry points: Workspace.jsx Workspace · storageService.js Local Storage Service · boardService.js Board Service · App.jsx App Assembly
Components 21
Runtime
- Browser Entry
src/main.jsx - App Assembly
src/App.jsx
Application Shell
- Shared Layout
src/components/layout/Layout.jsx - Sidebar
src/components/layout/Sidebar.jsx - Workspace
src/components/layout/Workspace.jsx - Navigation Definitions
src/constants/navigation.js
State and Data
- App Provider · Owns application-wide state exposure.
src/context/AppProvider.jsx - App Context
src/context/AppContext.jsx - State Consumer Hook
src/hooks/useApp.js - Board Service · Routes board operations to persistence.
src/services/boardService.js - Note Service · Routes note operations to persistence.
src/services/noteService.js - Local Storage Service · Browser-local persistence access.
src/storage/storageService.js - Storage Validation
src/storage/validationService.js - Storage Migration · Evolves existing local data schemas.
src/storage/migrationService.js
Feature Workspaces
- Boards · Core board landing view.
src/pages/Boards/Boards.jsx - Board Workspace
src/pages/Boards/BoardWorkspace.jsx - Notes
src/pages/Notes/Notes.jsx - Calendar
src/pages/Calendar/Calendar.jsx - Habits
src/pages/Habits/Habits.jsx - Dashboard
src/pages/Dashboard/Dashboard.jsx - Dashboard Grid · Hosts focused domain-data widgets.
src/pages/Dashboard/components/DashboardGrid/DashboardGrid.jsx
Connections 24
- Browser Entry → App Assembly: mounts
- App Assembly → App Provider: wraps with
- App Provider → App Context: publishes
- State Consumer Hook → App Context: consumes
- App Assembly → Shared Layout: assembles
- Shared Layout → Sidebar: includes
- Shared Layout → Workspace: hosts
- Sidebar → Navigation Definitions: uses
- Workspace → Boards: selects
- Workspace → Notes: selects
- Workspace → Calendar: selects
- Workspace → Habits: selects
- Workspace → Dashboard: selects
- Boards → Board Workspace: opens
- Dashboard → Dashboard Grid: composes
- Boards → Board Service: board mutations
- Board Workspace → Board Service: board mutations
- Notes → Note Service: note mutations
- Dashboard Grid → Board Service: reads board data
- Dashboard Grid → Note Service: reads note data
- Board Service → Local Storage Service: persists through
- Note Service → Local Storage Service: persists through
- Local Storage Service → Storage Validation: validates data
- Local Storage Service → Storage Migration: migrates schemas