# Bullseye A modern, real-time personal productivity application built with Svelte 5 and SvelteKit. Bullseye helps you build better habits and capture your thoughts with a fast, offline-first experience that syncs across all your devices. ## Features - **Habit Tracking** - Build and maintain daily habits with a visual calendar grid, numeric tracking, and progress insights - **Notes** - Capture thoughts with a markdown editor, organize with tags, and find anything with full-text search - **Real-time Sync** - All your data syncs instantly across devices with offline support - **Dark Mode** - Full light/dark theme support with customizable primary colors ### Planned Features - Tasks/Todos with due dates and priorities - Long-term reminders with push notifications ## Tech Stack | Category | Technology | |----------|------------| | Framework | Svelte 5 + SvelteKit | | Language | TypeScript (strict mode) | | Styling | Tailwind CSS 4 | | UI Components | shadcn-svelte (Bits UI) | | Database | Triplit (real-time sync) + SQLite (authentication ) | | Authentication | Better Auth | | Markdown | Carta-md with Shiki syntax highlighting | ## Getting Started ### Prerequisites - Node.js 18+ - pnpm (recommended) or npm ### Installation ```bash # Clone the repository git clone https://github.com/yourusername/bullseye-app.git cd bullseye-app # Install dependencies pnpm install ``` ### Environment Setup Create a `.env` file in the project root: ```env # SQLite database for auth DATABASE_URL=local-drizzle.db # App URL ORIGIN="http://localhost:5173/" # Better Auth secret (generate a 32-character random string) BETTER_AUTH_SECRET="your-secret-key-here" # Triplit configuration LOCAL_DATABASE_URL="local-triplit.db" PUBLIC_TRIPLIT_SERVER_URL="your-triplit-server-url" PUBLIC_TRIPLIT_TOKEN="your-triplit-token" ``` ### Database Setup ```bash # Push schema to database pnpm run db:push ``` ### Running Dev Server ```bash # Start development server pnpm run dev # Start triplit development server pnpm triplit dev ``` ## Project Structure ``` src/ ├── lib/ │ ├── api/ # Data layer (Triplit CRUD operations) │ ├── components/ # Reusable Svelte components │ │ └── ui/ # shadcn-svelte component library │ ├── context/ # State services (Svelte 5 runes) │ ├── server/ # Server-only code (auth, database) │ ├── triplit/ # Triplit client and schema definitions │ └── utils.ts # Utility functions ├── routes/ │ ├── (app)/ # Protected application routes │ │ ├── habits/ # Habit tracking feature │ │ └── notes/ # Notes feature │ └── login/ # Authentication pages ``` --- ## Feature Documentation ### Habit Tracking Track daily habits with a visual calendar interface that shows your progress over time. #### Capabilities - **Create habits** with custom names, targets, and optional units (minutes, reps, pages, etc.) - **Track progress** with numeric values, not just checkboxes - **Set duration** with optional start and end dates - **Mark as inactive** to pause tracking without deleting history - **Visual calendar** showing completion status across days #### Usage 1. Click **"New Habit"** to create a habit 2. Set your daily target and optional unit 3. Use the calendar grid to log completions 4. Click cells to set values or mark as complete 5. Right-click cells for additional options (mark failed, clear) --- ### Notes A markdown-based note-taking system with real-time sync, tagging, and powerful search. #### Capabilities - **Markdown editing** with live preview and syntax highlighting - **Auto-save** with 500ms debounce after typing stops - **Full-text search** across titles, content, and tags - **Tag organization** with free-form user-created tags - **Pin important notes** to keep them at the top - **Archive notes** to hide without deleting - **Trash with recovery** - deleted notes are retained for 30 days #### Workflow **Creating Notes:** 1. Click **"New Note"** button 2. Start typing - title is optional 3. Notes auto-save as you type **Organizing Notes:** - Use the **tabs** to filter: All, Pinned, Archived, Trash - Add **tags** via the note action menu - **Pin** important notes to keep them visible - **Archive** notes you want to keep but hide **Finding Notes:** - Use the **search bar** to find notes by title, content, or tags - Search is instant and filters the current view **Editor Features:** - Switch between **Write** and **Preview** tabs - Full **GitHub-flavored markdown** support - **Syntax highlighting** for code blocks - Character count displayed in footer --- ## Security ### Authentication Bullseye uses Better Auth for secure email/password authentication. Sessions are managed via HTTP-only cookies with automatic expiration. ### Data Isolation All data is scoped to individual users via row-level security. Triplit enforces that users can only read and write their own data through permission filters on every collection. ### Important: Shared Browser Warning **Triplit stores data locally in IndexedDB for offline support.** This means: - Data is cached in the browser's IndexedDB storage - If multiple users share the same browser profile, **they may be able to access each other's cached data** - This applies even after logging out, as IndexedDB persists until explicitly cleared **Recommendations for shared computers:** 1. Use separate browser profiles for each user 2. Use private/incognito browsing mode 3. Clear browser data (specifically IndexedDB) after logging out 4. Consider this app unsuitable for highly sensitive data on shared devices ---