Skip to content

Getting Started

dbwg2009 edited this page May 4, 2026 · 1 revision

Getting Started

Quick start (Docker — recommended)

The fastest way to run Noted. No clone required.

1. Download the config files

curl -O https://raw.githubusercontent.com/dbwg2009/Noted/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/dbwg2009/Noted/main/.env.example
mv .env.example .env

2. Fill in .env

Variable Required How to get it
AUTH_SECRET Yes openssl rand -base64 32
RESEND_API_KEY Yes resend.com — free tier
OPENROUTER_API_KEY Yes openrouter.ai — free tier
CRON_SECRET Yes openssl rand -hex 32
EBAY_APP_ID No eBay Developer Portal — enables the product search fallback
ALLOWED_EMAIL No Restricts registration to one email address

See Configuration for every variable.

3. Start

docker compose up -d

Images pull from Docker Hub automatically. The migrate service applies the DB schema before the app starts. Open http://localhost:3000.

4. Create your account

Go to http://localhost:3000/login and register. If ALLOWED_EMAIL is set, use that address.


Build from source (Docker)

git clone https://github.com/dbwg2009/Noted.git && cd Noted
cp .env.example .env   # fill in values (leave DATABASE_URL blank — compose sets it)
docker compose up --build -d

Native (Node.js)

Use this for fast iteration without rebuilding Docker images.

Prerequisites

  • Node.js 20+
  • A running PostgreSQL instance (local or remote)

Steps

git clone https://github.com/dbwg2009/Noted.git && cd Noted
cp .env.example .env.local   # fill in DATABASE_URL and all other vars
npm install
npm run db:push              # applies the Drizzle schema
npm run dev                  # starts on http://localhost:3000

Useful scripts

Script What it does
npm run dev Next.js dev server with hot reload
npm run build Production build
npm run db:push Push Drizzle schema to DB (no migration files)
npm run db:studio Drizzle Studio — DB browser at localhost:4983

Calendar sync (iCal)

After logging in, find your unique iCal URL at the bottom of the Dashboard. Paste it into:

  • Google Calendar → Other calendars → From URL
  • Apple Calendar → File → New Calendar Subscription
  • Outlook → Add Calendar → From Internet

The URL contains a secret token. Reset it from the Dashboard if it leaks.


Photo uploads

Photos are stored via lib/storage.ts. Two strategies, set by STORAGE_STRATEGY:

Strategy Where files go Best for
local (default) public/uploads/ on disk Docker (use a volume for persistence)
base64 photo_url column as a data URI Vercel / serverless

For Docker, add a volume mount to persist uploads across container restarts:

# docker-compose.yml
services:
  app:
    volumes:
      - uploads:/app/public/uploads

volumes:
  uploads:

Clone this wiki locally