2 pointsby pghqdev3 hours ago2 comments
  • calchiwo3 hours ago
    Using IndexedDB as the only store moves the reliability boundary to the browser. That removes server risk but introduces quota limits, eviction, and “best effort” persistence, especially on mobile where storage gets reclaimed aggressively.

    For a notes app, silent data loss is the critical failure mode. How are you handling quota errors and potential eviction before users discover missing notes?

    • pghqdev2 hours ago
      Valid concerns. Text notes are small so quota limits rarely hit in practice, but silent data loss is indeed the critical failure mode for a notes app.

      Also the main use-case for the app is to be used as a quick notepad rather than to archive data.

      Current temporary mitigation: export to MD/PDF/TXT from the note menu. For users who need real durability guarantees, the planned E2EE sync would provide redundancy across devices and our servers

      What I'm adding in upcoming updates:

        - Request navigator.storage.persist() on first use to prevent automatic eviction           
      
        - Monitor quota via navigator.storage.estimate() and warn when approaching limits          
      
        - Catch QuotaExceededError explicitly and prompt immediate export                          
      
        - Periodic "backup reminder" for users who haven't exported recently                       
      
                      
      Really appreciate the specific pushback.
  • pghqdev3 hours ago
    Built this because I wanted a notes app that:

    1. Works offline (airplane, subway, spotty wifi)

    2. Doesn't require an account

    3. Keeps data on my device, not someone else's server

    4. Something to take notes right there in the browser

    Technical stack: Next.js static export, IndexedDB for storage, Web Speech API for voice dictation. Total infrastructure cost is ~$0/month for static hosting.

    The architecture is intentionally simple. Notes live in the browser's IndexedDB. Voice dictation uses the browser's native speech recognition. No external APIs, no database, no waitlists, no sign-ups

    Trade-offs I accepted:

    - No sync between devices (considering E2EE sync as optional paid feature)

    - Data loss if you clear browser storage (export to MD/PDF available)

    - PWA only, no native apps

    Who actually uses this:

    - Quick capture when you don't want to open a full app

    - Drafting prompts before pasting into ChatGPT/Claude (has token counter)

    - Private journaling without cloud anxiety

    - Offline notes on flights/commutes

    - People with "account fatigue" who just want to write

    Curious what HN thinks about local-first as a default architecture choice. The privacy angle resonates with users, but the no-sync limitation is a dealbreaker for many.

    Happy to discuss technical decisions or answer questions.

    • altmanaltman3 hours ago
      How do you get this if there's "no external APIs"?

      > Text-to-Speech > Listen to your notes with built-in text-to-speech. Choose from multiple TTS providers and voices to suit your preference.

      > 3 TTS providers: Browser, ElevenLabs, OpenAI

      • pghqdev2 hours ago
        That is an optional + feature in the upcoming roadmap where users can choose to BYOK for TTS if they want to.

        In the core product we are not using the like of either ElevenLabs or OpenAI at all