LaunchStack
AI-powered StartUp Accelerator Engine built with Next.js, LangChain, PostgreSQL + pgvector. Upload, organize, and chat with documents. Includes predictive missing-document detection, role-based workflows, and page-level insight extraction.
Install / Use
/learn @Deodat-Lawson/LaunchStackREADME
Launchstack - Professional Document Reader AI
Launchstack is a Next.js platform for role-based document management, AI-assisted Q&A, and predictive document analysis. It combines document upload, optional OCR, embeddings, and retrieval to help teams find gaps and act faster.
Core Features
- Clerk-based Employer/Employee authentication with role-aware middleware.
- Document upload pipeline with optional OCR for scanned PDFs.
- PostgreSQL + pgvector semantic retrieval for RAG workflows.
- AI chat and predictive document analysis over uploaded content.
- Agent guardrails with PII filtering, grounding checks, and confidence gating.
- Supervisor agent that validates outputs against domain-specific rubrics.
- Marketing pipeline with content generation for Reddit, X, LinkedIn, and Bluesky.
- Optional web-enriched analysis with Tavily.
- Optional reliability/observability via Inngest and LangSmith.
Predictive Analysis — Supported Document Types
Launchstack runs domain-specific analysis tailored to your document type:
| Type | What It Detects | |------|----------------| | Contract | Missing exhibits, schedules, addendums, and supporting agreements | | Financial | Missing balance sheets, audit reports, income statements | | Technical | Missing specifications, manuals, diagrams, deliverables | | Compliance | Missing regulatory filings, certifications, policy documents | | Educational | Missing syllabi, handouts, readings, linked resources | | HR | Missing policies, forms, benefits materials, handbooks | | Research | Missing cited papers, datasets, supplementary materials | | General | Any document with cross-references and attachments |
Each analysis type also extracts insights (deadlines, action items, resources, caveats) and runs chain-of-verification on high-priority predictions.
Importing External Knowledge
Launchstack can ingest content exported from third-party tools. No API keys or OAuth setup required — export your data, upload the files, and the ingestion pipeline handles the rest.
Supported Export Formats
| Source | Export Method | Resulting Format | Launchstack Adapter |
|--------|-------------|-----------------|----------------|
| Notion | Settings > Export > Markdown & CSV | .md, .csv (ZIP) | TextAdapter, SpreadsheetAdapter |
| Notion | Page > Export > HTML | .html | HtmlAdapter |
| Google Docs | File > Download > Microsoft Word | .docx | DocxAdapter |
| Google Sheets | File > Download > CSV or Excel | .csv, .xlsx | SpreadsheetAdapter |
| Google Drive | Google Takeout (takeout.google.com) | .docx (ZIP) | DocxAdapter |
| Slack | Workspace Settings > Import/Export > Export | .json (ZIP) | JsonExportAdapter |
| GitHub | Code > Download ZIP | .md, .txt (ZIP) | TextAdapter |
| GitHub | gh issue list --json ... | .json | JsonExportAdapter |
| GitHub | gh pr list --json ... | .json | JsonExportAdapter |
How to Export
Notion
- Open your Notion workspace.
- Click the ... menu on a page, or go to Settings & members > Export for a full workspace export.
- Select Markdown & CSV as the format and check Include subpages if needed.
- Download the ZIP and upload it directly to Launchstack.
Google Docs / Sheets
- Open the document in Google Docs or Sheets.
- Go to File > Download and choose Microsoft Word (.docx) or CSV / Excel (.xlsx).
- Upload the downloaded file. For bulk exports, use Google Takeout to export your Drive as a ZIP.
Slack
- Go to Workspace Settings > Import/Export Data > Export.
- Choose a date range and start the export.
- Download the ZIP and upload it to Launchstack. Each channel's messages will be ingested as a separate document.
GitHub
- Repo docs: Click Code > Download ZIP on any GitHub repository. Upload the ZIP — all Markdown and text files will be ingested.
- Issues: Install the GitHub CLI and run:
Upload the resultinggh issue list --state all --limit 1000 --json number,title,body,state,labels,author,createdAt,closedAt,comments > issues.jsonissues.jsonfile. - Pull requests: Run:
Upload the resultinggh pr list --state all --limit 1000 --json number,title,body,state,labels,author,createdAt,mergedAt,comments > prs.jsonprs.jsonfile.
All uploaded content flows through the standard ingestion pipeline (chunking, embedding, RAG indexing) and becomes searchable alongside your other documents.
Architecture
Launchstack follows a three-layer modular architecture:
block-beta
columns 9
SLABEL["Services\nLayer"]:1
MKT["Marketing Engine\n─────────────\nTrend Analysis\nContent Generation\nWeb Scraping Jobs"]:2
LEG["Legal Services\n─────────────\nTemplate Library\nAuto-Fill & Clauses\nLegal Vault"]:2
ONB["Employee Onboarding\n─────────────\nOnboarding Agent\nQuizzes & Checks\nProgress Tracking"]:2
DOCR["Document Reasoning\n─────────────\nPage Index & TOC\nRLM Agent\nKnowledge Graph"]:2
space:9
TLABEL["Tools\nLayer"]:1
RAG["RAG Pipeline\n(BM25 + Vector)"]:2
WEB["Web Search\n(Tavily, Firecrawl)"]:2
REW["Doc Rewrite\n(Summarize, Refine)"]:2
TMPL["Template Engine\n(Form → PDF)"]:2
space:1
ING["Doc Ingestion\n(OCR, Chunk, Embed)"]:4
ENT["Entity Extraction\n(NER, Graph RAG)"]:4
space:9
PLABEL["Physical\nLayer"]:1
DB["PostgreSQL + pgvector\n─────────────\nEmbeddings Index\nDocument Structure\nKnowledge Graph\nDomain Tables"]:2
HOST["Hosting & Compute\n─────────────\nNext.js 15\nInngest Jobs\nAgent Hosting\nML Sidecar"]:2
EXT["External Services\n─────────────\nOCR Providers\nFile Storage (S3)\nClerk Auth + RBAC"]:2
KBS["Knowledge Bases\n─────────────\nCompany KB\nLegal Templates\nOnboarding Docs"]:2
%% Service → Tool edges
MKT --> RAG
MKT --> WEB
MKT --> REW
LEG --> RAG
LEG --> REW
LEG --> TMPL
ONB --> RAG
ONB --> REW
DOCR --> RAG
DOCR --> WEB
DOCR --> REW
DOCR --> ING
DOCR --> ENT
%% Tool → Physical edges
RAG --> DB
RAG --> KBS
WEB --> HOST
REW --> HOST
TMPL --> EXT
TMPL --> KBS
ING --> DB
ING --> EXT
ING --> HOST
ENT --> DB
ENT --> HOST
classDef layer fill:#1a1a2e,color:#eee,stroke:none
classDef svc fill:#4A90D9,color:#fff,stroke:#2C5F8A,stroke-width:1px
classDef tool fill:#F5A623,color:#fff,stroke:#C47D0E,stroke-width:1px
classDef phys fill:#27AE60,color:#fff,stroke:#1E8449,stroke-width:1px
class SLABEL,TLABEL,PLABEL layer
class MKT,LEG,ONB,DOCR svc
class RAG,WEB,REW,TMPL,ING,ENT tool
class DB,HOST,EXT,KBS phys
The platform is organized into:
- Services Layer - Vertical business modules (Marketing, Legal, Onboarding, Document Reasoning)
- Tools Layer - Reusable AI capabilities (RAG, Web Search, Document Processing, Entity Extraction)
- Physical Layer - Infrastructure (PostgreSQL + pgvector, Next.js hosting, External services, Knowledge bases)
All services operate within domain-partitioned boundaries enforced by Clerk RBAC. RAG queries are scoped by domain + company_id to ensure data isolation.
Tech Stack
- Next.js 15 + TypeScript
- PostgreSQL + Drizzle ORM + pgvector
- Clerk authentication
- OpenAI + LangChain
- UploadThing + optional OCR providers
- Tailwind CSS
Prerequisites
- Node.js 18+
- pnpm
- Docker + Docker Compose (recommended for local DB/full stack)
- Git
Quick Start
1) Clone and install
git clone <repository-url>
cd pdr_ai_v2-2
pnpm install
2) Configure environment
Create .env from .env.example and fill required values:
DATABASE_URLNEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEYBLOB_READ_WRITE_TOKEN(Vercel Blob read/write token)OPENAI_API_KEYINNGEST_EVENT_KEY, as placeholder
Optional integrations:
NODE_ENV=development (for development, otherwise assumed to be production)UPLOADTHING_TOKENTAVILY_API_KEYINNGEST_EVENT_KEY,INNGEST_SIGNING_KEYAZURE_DOC_INTELLIGENCE_ENDPOINT,AZURE_DOC_INTELLIGENCE_KEYLANDING_AI_API_KEY,DATALAB_API_KEYLANGCHAIN_TRACING_V2,LANGCHAIN_API_KEY,LANGCHAIN_PROJECTDEBUG_PERF(1ortrue) to enable dev perf logs for middleware and key auth/dashboard APIsSIDECAR_URLNEO4J_URINEO4J_USERNAMENEO4J_PASSWORD
2.1) Configure Vercel Blob Storage
Vercel Blob is used for storing uploaded documents. Both public and private stores are supported -- the upload logic auto-detects which mode the store uses and adapts automatically.
- In the Vercel dashboard, go to Storage → Blob → Create Store.
- Choose either Public or Private access. Both work:
- Public stores produce URLs the browser can load directly (faster for previews).
- Private stores keep files behind authentication; the app proxies content through
/api/documents/[id]/contentand/api/files/[id]so previews still work.
- Generate a Read/Write token for the store and add it as
BLOB_READ_WRITE_TOKENin your environment (.envlocally, or Vercel Project Settings for deploys). - Redeploy so the token is available at build and runtime.
- Verify: sign in to the Employer Upload page, upload a small PDF, and confirm
/api/upload-localreturns avercel-storage.comURL without errors.
3) Start database and apply schema
pnpm db:push
4) Run app
pnpm run dev
Open http://localhost:3000.
Docker Deployment Methods
Method 1: Full stack (recommended)
Runs db + migrate + app via Compose:
docker compose --env-file .env --profile dev up
Detached mode:
docker compose --env-file .env --profile dev up -d
Method 2: App container only (external DB)
Use this when your database is managed externally.
docker build -t pdr-ai-app .
docker run --rm -p 3000:3000 \
-e DATABASE_URL="$DATABASE_URL" \
-e
