Ofishally Organized is a React, TypeScript, and Vite single-page app for organizing tasks, journal entries, and calendar views. It runs entirely in the browser during development and currently stores todo board data in localStorage.
- Node.js
^20.19.0or>=22.12.0 - npm, using the committed
package-lock.json - A modern browser with support for standard Web APIs such as
localStorageandcrypto.randomUUID
Vite provides the local development server, build tooling, and production preview server.
Install dependencies from the repository root:
npm installStart the local development server:
npm run devVite prints the local URL in the terminal, usually http://localhost:5173/.
npm run devstarts the Vite development server with hot module replacement.npm run buildruns TypeScript project checks and creates a production build indist/.npm run lintruns ESLint across the repository.npm run previewserves the production build locally for verification.
There is no dedicated test runner configured yet. Before opening or merging changes, run:
npm run lint
npm run buildFor UI changes, also run the app with npm run dev and manually verify the affected route:
/and/todofor the todo board/journalfor journal entries/calendarfor calendar views
Create a production build:
npm run buildThe deployable static assets are written to dist/. Deploy the contents of dist/ to any static hosting provider that supports client-side React apps, such as Netlify, Vercel, GitHub Pages, or an S3/static web hosting setup.
To check the production bundle locally before deploying:
npm run previewBecause this app uses client-side routing through react-router-dom, configure the hosting provider to fall back to index.html for unknown paths such as /todo, /journal, and /calendar.
Primary runtime dependencies:
reactandreact-domprovide the UI runtime.react-router-domprovides client-side routing.@hello-pangea/dndprovides drag-and-drop behavior for the todo board.@tiptap/reactand related TipTap extensions provide rich text editing features.usehooks-tsprovides reusable React hooks.
Primary development dependencies:
viteand@vitejs/plugin-react-swcprovide development and build tooling.typescriptprovides static type checking.eslint,typescript-eslint, and React ESLint plugins provide linting.
The app currently has no backend service, external API, authentication provider, or database integration.
Current browser integrations:
- Todo columns and tasks are persisted in
localStorageunder thecolumnsandtaskskeys. - Journal state is managed in frontend state and is prepared for future persistence.
- Calendar behavior is implemented locally in TypeScript utilities and React components.
When adding an external system, document the service name, required environment variables, local setup steps, and deployment configuration in this README.
Source code lives under src/ and is organized by feature:
src/todo/contains todo board pages, components, state, and types.src/journal/contains journal pages, editor components, state, and date utilities.src/calendar/contains calendar pages, components, constants, types, and utilities.src/shared/contains components shared across multiple features.src/AppRoutes.tsxdefines the app's client-side routes.src/AppLayout.tsxdefines the shared layout around routed pages.
Use the @ import alias for paths rooted at src/; it is configured in vite.config.ts.
Recommended change workflow:
- Create or update code in the relevant feature folder.
- Keep shared components in
src/shared/only when more than one feature uses them. - Add or update TypeScript types near the feature that owns them.
- Run
npm run lintandnpm run build. - Manually verify the changed route in the browser.