A beautiful, intuitive time tracking application that visualizes your daily activities in a colorful grid pattern. Track your events, moods, and daily patterns with an easy-to-use interface.
It's a web app, but all your data stays on your own machine.
It can be installed as a Progressive Web App, and run offline.
Use it at https://exocortexlog.com/
- Visual Time Grid: See your entire day laid out in 24-hour blocks
- Mood Tracking: Track happiness, wakefulness, and health for each event
- Color-Coded Categories: Automatically color-codes events by category
- Infinite Scroll: Load past days automatically as you scroll
- Import/Export: Save your data as JSON files for backup
- Test Data Generator: Generate sample data to explore the app
- Mobile Responsive: Works perfectly on phones and tablets
- Dark Theme: Easy on the eyes with a dark interface
Before you start, make sure you have:
- Node.js (version 16 or higher) - Download from nodejs.org
- npm (comes with Node.js) - Package manager for JavaScript
To check if you have them installed:
node --version
npm --versionFirst, you need to download all the packages the app depends on:
npm installThis reads the package.json file and downloads everything listed in the dependencies section.
Run the app in development mode with hot reloading (changes appear automatically):
npm run devThis command:
- Starts a local web server
- Opens the app in your browser (usually at
http://localhost:5173) - Watches for file changes and refreshes automatically
- Shows detailed error messages in the browser
Navigate to the URL shown in terminal (usually http://localhost:5173)
- Click the blue
+button in the bottom-right corner - Enter a category (e.g., "Work", "Sleep", "Exercise")
- Adjust the end time using the +/- buttons
- Set your mood sliders (happiness, wakefulness, health)
- Click "Add" to save
- Horizontal axis: 24 hours of the day (midnight to 11 PM)
- Vertical axis: Different days (today at top, past days below)
- Colored blocks: Your events - color indicates category
- Smiley faces: Show your mood during each event
- Gray lines: Hour markers for time reference
The Summary page provides a smart, compact overview of your recent activity log:
- Notable events stand out: Any event with a personal note is always shown as an individual row, clearly displaying your notes and details.
- Routine activities batched: Consecutive events without notes are automatically collapsed into a single summary row, making it easy to skim past stretches of routine.
- Expand for details: Click to expand a collapsed group and reveal all the individual events inside.
- Mood at a glance: Rows display quick mood faces for happiness, wakefulness, and health, with color bars representing event types.
- Day separators: Each day is visually separated and labeled for quick navigation.
- Edit instantly: Click any row to quickly edit event details or notes.
This lets you understand your life at a glanceβsee exactly what stands out, hide what doesnβt, and zoom into every detail with a click.
- Export: Click "Export" to download all your data as a JSON file
- Import: Click "Import" to load data from a previously saved file
- Test Data: Click "Test" to generate 30 days of sample events
- Clear: Click "Clear" to delete all events (use with caution!)
src/
βββ components/ # UI components and app providers
β βββ ui/ # Basic and advanced UI primitives (shadcn/ui style)
β βββ AppProvider.tsx # Application-wide providers setup
β βββ ColorOverrideWidget.tsx # Color theme override UI
β βββ ErrorBoundary.tsx # Global error boundary
β βββ EventDialog.tsx # Add/edit time event dialog
β βββ ExocortexGrid.tsx # Main time-overview grid
β βββ NewUserWelcomeDialog.tsx # Welcome dialog for new users
β βββ NotificationSettings.tsx # User notification controls
β βββ PageLayout.tsx # Shared page container
β βββ ScrollToTop.tsx # Scroll restoration utility
β βββ SmileyFace.tsx # Mood/emotion visualization
β βββ StatsView.tsx # Analytics/stats widgets
β βββ TitleNav.tsx # Top navigation/title bar
βββ contexts/
β βββ AppContext.ts # App-wide context and config
βββ hooks/
β βββ useAppContext.ts # App settings context hook
β βββ useIsMobile.tsx # Responsive/mobile detection
β βββ useLocalStorage.ts # Browser storage helper
β βββ useNotifications.ts # Notifications/permissions logic
β βββ usePageData.ts # Page data (events, summaries)
β βββ useTheme.ts # Theme switch logic
β βββ useToast.ts # Toast (snack bar) feedback
βββ lib/
β βββ cacheReset.ts # Cache handling utils
β βββ dataExport.ts # Data import/export helpers
β βββ exocortex.ts # Main app data logic
β βββ polyfills.ts # Polyfills for compatibility
β βββ utils.ts # Misc helpers
βββ pages/
β βββ About.tsx # About/info page
β βββ Conf.tsx # (Experimental / config page)
β βββ Index.tsx # Main grid view/welcome page
β βββ NotFound.tsx # 404 page
β βββ Stats.tsx # Analytics/stats page
β βββ Summary.tsx # Collapsed event summary view
βββ test/
β βββ ErrorBoundary.test.tsx # Error boundary test
β βββ setup.ts # Test setup/bootstrap
β βββ TestApp.tsx # Test context wrapper
βββ App.test.tsx # App-level tests
βββ App.tsx # Top-level app wrapper/providers
βββ AppRouter.tsx # React Router routes
βββ index.css # Global styles/theme variables
βββ main.tsx # App entry point (mount, font import)
βββ vite-env.d.ts # Vite type declarations
In your terminal, you can run these commands:
npm run dev # Start development server with hot reloadnpm run build # Create production-ready files in 'dist/' folder
npm run test # Run all tests and type checkingnpm run dev: Starts a development server that automatically refreshes when you save changesnpm run build: Optimizes and bundles your code for production (creates smaller, faster files)npm run test: Checks for errors, runs tests, and ensures code quality
This app stores your data locally in your browser using IndexedDB:
- β No server required - Everything runs in your browser
- β Privacy - Your data never leaves your device
- β Offline - Works without internet connection
β οΈ Browser-specific - Data stays in the browser you're using
Important: If you clear your browser data, you'll lose all your tracked events. Use the Export feature to create backups!
The colors are defined in src/index.css using CSS variables. Look for:
:root {
--primary: /* main color */
--background: /* page background */
--card: /* card background */
/* ... more colors */
}Categories are created dynamically - just type any name when creating an event! The app automatically assigns colors based on the category name.
The grid configuration is in src/components/ExocortexGrid.tsx:
const HOURS_IN_DAY = 24; // Change if you want different time ranges
const HOUR_WIDTH = 60; // Width of each hour block in pixels"npm command not found"
- Make sure Node.js is installed and restart your terminal
"Port already in use"
- Stop any other development servers, or the app will automatically use a different port
White screen/blank page
- Check the browser console (F12) for error messages
- Try stopping the dev server and running
npm installagain
Changes not appearing
- Make sure you saved your files
- Try refreshing the browser manually
If you encounter issues:
- Check the terminal for error messages
- Open browser dev tools (F12) and check the Console tab
- Look at the Network tab to see if files are loading correctly
- Use TypeScript for type safety
- Follow React functional components with hooks
- Use Tailwind classes for styling (avoid custom CSS when possible)
- Keep components small and focused
- Use console.log() to print values and track what's happening
- Use React DevTools browser extension to inspect component state
- Check the Network tab to see if data is loading correctly
- Make a change to a file
- Save the file (Ctrl+S or Cmd+S)
- Browser should refresh automatically
- If not, manually refresh the page
Since you're learning these frameworks, here are some helpful resources:
This is a personal project for time tracking, but feel free to:
- Fork the repository
- Make improvements for your own use
- Share feedback and suggestions
This project is open source and available under the (GPL V3)[https://www.gnu.org/licenses/gpl-3.0.en.html] License.
Happy time tracking! πβ¨
