Thanks for your interest in improving Temlet! This guide covers local setup, the development workflow, and how releases are cut.
- Node.js >= 20
- PostgreSQL (local install or Docker)
- ffmpeg on your
PATH(bundledffmpeg-staticis used as a fallback) - After Effects + nexrender for the actual render pipeline (optional for UI work)
# 1. Install dependencies
npm install
# 2. Configure environment
cp env.example .env
# then edit .env — at minimum set DATABASE_URL and WORKING_DIRECTORY
# 3. Set up the database
npm run prisma:generate
npx prisma migrate dev
# 4. Start the dev server (http://localhost:3001)
npm run devPrefer Docker? See README-DOCKER.md for a one-command setup.
- Create a branch from
master:git checkout -b feat/my-change - Make your change. Keep it focused.
- Run the checks locally before pushing:
npm run lint npm run build
- If you changed
prisma/schema.prisma, generate a migration:npx prisma migrate dev --name describe_your_change
- Open a pull request against
master. CI (lint + build) must pass.
We use Conventional Commits:
feat: add scheduled TikTok uploads
fix: correct asset path resolution on Windows
docs: clarify WORKING_DIRECTORY setup
chore: bump dependencies
Types: feat, fix, refactor, docs, test, chore, perf, ci.
- TypeScript strict mode — add explicit types on exported/public APIs, avoid
any. - Prefer immutable updates; validate input at API boundaries.
- No
console.login production code paths. - Never commit secrets or personal absolute paths. Secrets come from env only (see env.example).
Releases are automated. Pushing a v* tag triggers
.github/workflows/release.yml, which:
- Builds the production Docker image.
- Publishes it to GitHub Container Registry as
ghcr.io/rumitvn/temlet:<version>and:latest. - Creates a GitHub Release with auto-generated notes.
To cut a release:
# bump "version" in package.json first, then:
git tag v0.2.0
git push origin v0.2.0Open an issue using the provided templates. Please include reproduction steps and your environment for bugs.