Files
bullseye-app/README.md
T
2026-03-05 15:18:09 -05:00

5.6 KiB

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

# 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:

# 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

# Push schema to database
pnpm run db:push

Running Dev Server

# 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