Skip to content

indianic/deckforge

Repository files navigation

DeckForge

The presentation platform for teams that care about brand.

DeckForge is a self-hostable, AI-assisted presentation platform. It gives an entire organization a shared, brand-governed slide library, AI generation that respects your brand, secure trackable sharing, and a code-level (HTML/CSS) slide editor — one tool for the whole presentation lifecycle.

Slides are real HTML/CSS rendered with Handlebars against per-brand variables, so a single master slide re-skins itself to any brand automatically. No lock-in to a proprietary slide format.

DeckForge slide editor


Features

  • Master slide library — a central repository of reusable, on-brand slides. Categorize, search, lock, and publish; updates propagate to dependent decks.
  • Brand engine — logo, typefaces, and OKLCH color tokens defined once per workspace and auto-applied to every new deck.
  • Brand-aware AI generation — describe a slide in plain English and DeckForge generates editable HTML/CSS that already matches your brand. Bring your own provider (Anthropic, OpenAI-compatible, or custom endpoints).
  • Code-level editor — CodeMirror-based HTML/JSON editing with live preview, Handlebars variables, and a "save as master" workflow.
  • Secure sharing & analytics — public, time-bound, password-protected, or invite-only links; forward-only navigation, PDF-download control, and white-label sharing that hides DeckForge branding.
  • Passwordless auth — magic-link login plus optional Google OAuth. No passwords to manage.
  • Role-based collaboration — Admin / Manager / Contributor roles with per-workspace isolation.
  • Media manager — upload and manage assets via MinIO / S3-compatible storage (with a local-filesystem fallback for development).

Tech stack

Layer Technology
Framework Next.js 14 (App Router), React 18, TypeScript
Styling Tailwind CSS, OKLCH design tokens
Database PostgreSQL via Drizzle ORM
Slides Handlebars-templated HTML/CSS
Auth Magic-link (passwordless) + Google OAuth, JWT sessions
AI Anthropic SDK + pluggable custom LLM providers
Storage MinIO / S3-compatible (local filesystem fallback)
Email SendGrid or SMTP (via Nodemailer)

Getting started

Prerequisites

  • Node.js 20+ and pnpm
  • PostgreSQL 14+
  • (Optional) MinIO or any S3-compatible bucket for asset storage
  • (Optional) An LLM API key (e.g. Anthropic) — or set MOCK_LLM=true to skip real calls during development

1. Install

git clone https://github.com/indianic/deckforge.git
cd deckforge
pnpm install

2. Configure environment

Copy the example env file and fill in your values:

cp .env.example .env.local

At minimum set DATABASE_URL, NEXT_PUBLIC_APP_URL, and a 32+ character JWT_SECRET. See .env.example for the full list (email, OAuth, AI, and storage settings are optional and documented inline).

3. Set up the database

Create the database, then apply migrations:

createdb deckforge            # or use your existing Postgres instance
pnpm db:migrate               # apply schema migrations

4. Seed the first workspace & admin user

pnpm db:seed

This creates a workspace and an admin user (admin@deckforge.test by default — override with ADMIN_EMAIL / ADMIN_NAME).

5. Run

pnpm dev

The app starts at http://localhost:56001.

6. Log in

DeckForge uses passwordless magic-link auth. Generate a login link for your seeded user without needing email delivery:

pnpm bootstrap:magic-link admin@deckforge.test

Open the printed URL in your browser.


Available scripts

Script Description
pnpm dev Start the dev server on port 56001
pnpm build / pnpm start Production build / serve
pnpm lint ESLint
pnpm typecheck TypeScript type check (tsc --noEmit)
pnpm db:generate Generate a Drizzle migration from schema changes
pnpm db:migrate Apply pending migrations
pnpm db:studio Open Drizzle Studio
pnpm db:seed Seed the first workspace + admin user
pnpm bootstrap:magic-link Generate a one-time login link for a user

Project structure

app/          Next.js App Router — pages, layouts, and API routes
components/   React UI components (editor, master-slide, media, ui primitives)
lib/          Core logic — auth, db (Drizzle schema), AI providers, API client
hooks/        Reusable React hooks (auto-save, lock heartbeat)
stores/       Zustand client state
drizzle/      SQL migrations and Drizzle config
scripts/      Seeding, migration, and setup utilities
services/     Auxiliary services (e.g. markitdown document conversion)
public/       Static assets

Configuration notes

  • AI providers — configure Anthropic or any OpenAI-compatible / custom endpoint in-app under Settings → AI Providers. Set MOCK_LLM=true to develop without an API key.
  • Object storage — leave MINIO_ENDPOINT unset to use the local filesystem fallback (public/uploads/). Set MinIO/S3 credentials to use a real bucket.
  • Email — SendGrid is used when SENDGRID_API_KEY is set; otherwise it falls back to SMTP (e.g. a local Mailpit/Mailcatcher for development).

Contributing

Issues and pull requests are welcome. Please run pnpm lint and pnpm typecheck before submitting.

License

Released under the MIT License. © 2026 IndiaNIC Infotech Ltd.

Releases

No releases published

Packages

 
 
 

Contributors

Languages