Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Nepomuceno/timekeeper

Repository files navigation

Timekeeper

A mobile-friendly, offline-first time tracking app for presentations and recording sessions. Track your slides, capture photos, take notes, and export your session data.

Features

  • Session Management - Create, start, pause, resume, and end timing sessions
  • Slide Tracking - Mark new slides with Ctrl+Space or the UI button
  • Per-Slide Pause Tracking - Track pause events with timestamps and durations
  • Camera Support - Capture photos for each slide with front/back camera switching
  • Notes - Add notes to each slide during or after the session
  • Offline-First - All data stored locally in localStorage, works without internet
  • Export Options - Export sessions as ZIP files containing:
    • JSON - Full session data for re-import
    • CSV - Spreadsheet format for analysis
    • Markdown - Formatted report with embedded image references
  • Import - Import previously exported ZIP files with photos

Getting Started

Prerequisites

  • Bun (recommended) or Node.js

Installation

bun install

Development

bun run dev

Opens the app at http://localhost:3000

Build for Production

bun run build

Static files are output to the dist/ directory.

Testing

bun run test

Usage

  1. Create a Session - Click "New Session" to start
  2. Start Recording - Press the Start button to begin timing
  3. Mark Slides - Use Ctrl+Space or click "Next Slide" to mark a new slide
  4. Capture Photos - Use the camera button to take photos of your slides
  5. Add Notes - Type notes in the notes field for each slide
  6. Pause/Resume - Pause the timer when needed, pauses are tracked per-slide
  7. End Session - Complete the session to view the summary
  8. Export - Download your session as a ZIP with all photos included
  9. Import - Re-import exported sessions to restore them

Tech Stack

  • Vite - Build tool and dev server
  • React 19 - UI framework
  • TypeScript - Type safety
  • Tailwind CSS 4 - Styling
  • JSZip - ZIP file creation for exports
  • Lucide React - Icons

Deployment

The app is configured for static hosting. Deploy the dist/ folder to any static host:

  • Netlify - Configured via netlify.toml
  • Vercel - Works out of the box
  • GitHub Pages - Copy dist/ contents

Data Model

interface Session {
  id: string
  name: string
  createdAt: number
  startTime: number | null
  endTime: number | null
  totalDuration: number
  slides: Slide[]
  status: 'idle' | 'running' | 'paused' | 'completed'
}

interface Slide {
  id: string
  name: string
  startTime: number
  endTime: number | null
  duration: number
  photos: Photo[]
  notes: string
  pauseEvents: PauseEvent[]
  totalPauseTime: number
}

License

MIT

About

A time keeping tool

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published