WhisperNote
WhisperNote
Documentation

Guides

Jump into the part of the docs you actually need.

Quick start
From clone to workspace in four moves
Use the root workspace commands to get the full stack running locally.
  1. 1Install the workspace dependencies with `pnpm install`.
  2. 2Add your local environment variables in `apps/server/.env` and any web env you need.
  3. 3Run `pnpm run db:push` after updating the schema.
  4. 4Open `http://localhost:3001` for the site and `http://localhost:3000` for the API.
Getting started
The README, turned into a guided path.
The repo’s quick start now lives on the site, where it’s easier to scan and share.
Install
01

Pull the full workspace with `pnpm install`.

Configure
02

Set your database connection in `apps/server/.env` and any web env vars you need.

Migrate
03

Apply the current schema with `pnpm run db:push`.

Run
04

Start the stack with `pnpm run dev` and open the web app at port 3001.

Database setup
PostgreSQL is the backbone.
Make sure PostgreSQL is running locally or remotely.
Store the connection string in `apps/server/.env`.
Use `pnpm run db:push` to apply schema changes during development.
Use `pnpm run db:studio` when you want to inspect the database visually.
Environment
Keep the connection string local.
The website keeps the setup simple, but your local `.env` still owns the database and server wiring.
# apps/server/.env
DATABASE_URL="postgres://user:pass@localhost:5432/whispernote"
VITE_SERVER_URL="http://localhost:3000"

Commands

The handful of commands you’ll use every day.

Install dependencies
Pull the workspace dependencies for web, server, and shared packages.
pnpm install
Start development
Boot the full stack locally: web on 3001 and API on 3000.
pnpm run dev
Type-check everything
Run strict TypeScript checks across the monorepo.
pnpm run check-types
Ship a build
Produce production artifacts for all apps and packages.
pnpm run build
dev
Script
pnpm run dev

Run the whole monorepo in development mode.

build
Script
pnpm run build

Build all apps and packages for production.

check-types
Script
pnpm run check-types

Type-check the full workspace.

check
Script
pnpm run check

Run oxlint and oxfmt checks.

db:push
Script
pnpm run db:push

Push schema updates to PostgreSQL.

db:studio
Script
pnpm run db:studio

Open Drizzle Studio.

Project structure
The monorepo is split by responsibility
Web, server, and shared packages stay isolated so each layer can move independently.
whispernote/
├── apps/
│   ├── web/         # Frontend application (React + TanStack Start)
│   └── server/      # Backend API (Elysia, ORPC)
├── packages/
│   ├── api/         # API layer / business logic
│   ├── auth/        # Authentication configuration & logic
│   └── db/          # Database schema & queries
Desktop releases
Signed binaries, mirrored to R2.
The release mirror lives at `downloads.whispernote.app/releases/latest/`.
Desktop builds are produced in the Handy fork and synced to R2.
Updater artifacts are signed, so installs stay secure even outside GitHub.
What users get
A cleaner release path than “download random zip file.”
The latest release page is the one link to share in chat, docs, and the app UI.
Updater artifacts stay signed so the installation flow remains trustworthy.
Users can jump from docs to the download page without hunting through GitHub releases.
Deployment
The site deploys separately from the app binaries.
That keeps the website, web app, and desktop release flow loosely coupled.
1
Local infra lives in `packages/infra`.
2
`pnpm run deploy -- --stage prod` deploys the production stage.
3
GitHub Actions auto-deploy preview and production stages from `master`.
Support

Need a hand? The docs and the product now live in the same orbit.

If something is unclear, the source repo, release mirror, and product site are all one click away.