Privacy-focused time tracking system for developers with GitHub integration and local LLM analysis
Fresh is a comprehensive time tracking system designed specifically for developers who want to monitor their productivity without compromising privacy. It tracks your work across multiple sources while ensuring all sensitive data processing happens locally on your machine.
- Local LLM Processing: All screenshot analysis happens on your machine
- No 3rd Party Upload: Screenshots and sensitive data never leave your device
- Encrypted Storage: All data encrypted in Cloudflare KV
- User Control: You decide what to track and when
- GitHub Integration: Auto-track commits, PRs, issues, and reviews
- Activity Monitoring: Track keyboard and mouse activity (privacy-focused)
- Agent Prompts: Monitor AI assistant usage (Copilot, ChatGPT, etc.)
- Screenshot Analysis: Optional local analysis for productivity insights
- Cloudflare Workers: Global edge deployment for low latency
- Durable Objects: Real-time session management with WebSocket support
- KV Storage: Persistent, distributed data storage
- TypeScript: Type-safe codebase
node >= 18.0.0
npm >= 9.0.0# Clone the repository
git clone https://github.com/OWASP-BLT/Fresh.git
cd Fresh
# Install dependencies
npm install
# Start development server
npm run devA native Flutter desktop application is available for real-time activity tracking on Linux:
cd flutter_tracker
./run.shSee flutter_tracker/SETUP.md for detailed setup instructions.
Features:
- Real-time keyboard and mouse activity tracking
- Live scrolling charts updated every second
- Daily activity summaries
- Compact window design
- Privacy-focused (no keystroke/position logging)
import TimeTrackerClient from './client/tracker-client';
const tracker = new TimeTrackerClient({
apiUrl: 'http://localhost:8787',
userId: 'your-user-id',
projectId: 'your-project-id',
enableKeyboard: true,
enableMouse: true,
});
// Start tracking
await tracker.startSession();
// Your work happens here...
// End tracking
await tracker.endSession();βββββββββββββββββββ
β Client-Side β β User's Machine (Browser/CLI)
β Tracker β - Activity monitoring
ββββββββββ¬βββββββββ - Local LLM analysis
β
β HTTPS/WebSocket
β
ββββββββββΌβββββββββ
β Cloudflare β β Edge Network
β Worker β - API endpoints
β + Durable β - Session management
β Objects β - Real-time updates
ββββββββββ¬βββββββββ
β
ββββββ΄βββββ
β β
βββββΌββββ ββββΌβββββββ
β KV β β Durable β
β Store β β Objects β
βββββββββ βββββββββββ
- Activity patterns (counts only, no content)
- GitHub events (public metadata)
- Agent prompt metadata (lengths, names)
- High-level activity classification
- Actual keystrokes or text content
- Screenshot images (only local analysis results)
- Specific code content
- Personal identifiable information
When enabled (requires explicit consent):
- Screenshot captured on your device
- Analyzed locally with your own LLM
- Screenshot immediately deleted
- Only generic classification sent to server (e.g., "coding", "debugging")
Fresh/
βββ src/
β βββ api/ # API routes
β βββ modules/ # Core tracking modules
β βββ types/ # TypeScript types
β βββ durable-objects/ # Durable Objects
β βββ utils/ # Utilities
βββ client/ # Client-side tracker
βββ examples/ # Example implementations
βββ docs/ # Documentation
βββ tests/ # Tests
# Development
npm run dev # Start dev server
npm run type-check # Type checking
# Deployment
npm run deploy # Deploy to Cloudflare
# Testing
npm test # Run tests# Login to Cloudflare
npx wrangler login
# Create KV namespaces
npx wrangler kv:namespace create TIME_TRACKING_DATA
npx wrangler kv:namespace create ACTIVITY_DATA
# Update wrangler.toml with KV namespace IDs
# Deploy
npm run deployCreate .dev.vars for local development:
GITHUB_CLIENT_ID=your-github-app-client-id
GITHUB_CLIENT_SECRET=your-github-app-secret
ENCRYPTION_KEY=your-secure-encryption-key
LOCAL_LLM_ENDPOINT=http://localhost:11434For screenshot analysis:
# Option 1: Ollama
curl https://ollama.ai/install.sh | sh
ollama pull llava
ollama serve
# Option 2: LocalAI (Docker)
docker run -p 8080:8080 quay.io/go-skynet/local-ai:latestContributions are welcome! Please read our Contributing Guidelines first.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Cloudflare Workers
- Powered by Hono
- Inspired by privacy-focused productivity tools
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: [email protected]
- Mobile app support (iOS/Android)
- VS Code extension
- Browser extension (Chrome/Firefox)
- Jira/Linear integration
- Team dashboards
- Advanced analytics
- Export functionality (CSV/JSON)
- Custom reporting
Made with β€οΈ by the OWASP-BLT community