StartupDeckAI

StartupDeck documentation — guides for founders using the web app, plus self-hosting and operations.

Getting Started

StartupDeckAI Documentation

Guides for founders using StartupDeckAI in the browser, plus technical reference for running and operating the stack.

Most people use StartupDeckAI at startupdeck.in — sign up, validate an idea, and export reports from the dashboard. No installation required. Use Help Center for account and billing questions. The sections below cover product features and how the service is run. StartupDeckAI is online only; there is no self-hosted version.

Architecture

System Architecture

High-level overview of StartupDeckAI's split-architecture design.

Frontend — Vercel

  • React 18 + TypeScript
  • Vite build tool
  • Tailwind CSS + Shadcn UI
  • TanStack Query
  • Framer Motion
⇄

Backend — Render

  • Node.js + Express
  • Drizzle ORM
  • Passport.js Auth
  • Redis + BullMQ
  • Prerender.io SEO
⇄

Data Layer

  • PostgreSQL (Neon.tech)
  • Redis Cache
  • File Storage
  • Session Store
Architecture

Frontend (Vercel)

The client-side React application built with modern web technologies.

Tech Stack

TechnologyPurpose
React 18UI framework with concurrent features
TypeScriptType-safe codebase
WouterLightweight client-side routing
Tailwind CSSUtility-first styling
Shadcn UIBeautifully designed component library
Framer MotionPremium UI animations
TanStack QueryServer state management
ViteLightning-fast build tool with HMR

Project Structure

text
client/
├── src/
│   ├── components/     # Reusable UI components
│   ├── pages/          # Page components
│   ├── hooks/          # Custom React hooks
│   ├── lib/            # Utility functions
│   └── services/       # API service layer
├── index.html
└── vite.config.ts
Architecture

Backend (Render)

Express-based API server with services architecture.

Service architecture

The backend is a Node.js API with route handlers, background jobs, and service modules. Internal file layout is not documented here — refer to your authorized codebase copy.

Architecture

Database Schema

Core database tables powered by PostgreSQL and Drizzle ORM.

Data is stored in PostgreSQL using an ORM-managed schema. After configuring your database connection locally, apply migrations with the project scripts — do not expose schema details publicly.

Database commands

bash
# Push schema to database
npm run db:push
# Create admin user
npm run create-admin
Deployment

Deployment Guide

Deploy StartupDeckAI with a split architecture for maximum performance.

Split Architecture: Frontend on Vercel for edge-fast delivery, Backend on Render for server reliability. Custom domains: startupdeck.in (frontend) + api.startupdeck.in (backend).

Post-Deployment Checklist

Deployment

Vercel (Frontend)

Deploy the React frontend to Vercel for edge-optimized delivery.

Configuration

SettingValue
Repo RootStartupDeckAI
Build Commandvite build
Output Directorydist/client
Env VarsVITE_API_BASE_URL=https://api.startupdeck.in

Deploy Steps

bash
# Install Vercel CLI
npm install -g vercel
# Deploy
vercel --prod
Deployment

Render (Backend)

Deploy the Express backend to Render for reliable API hosting.

Configuration

SettingValue
Repo RootStartupDeckAI
Build Commandnpm install --include=dev && npm run build
Start Commandnpm start
Health Check/health
Custom Domainapi.startupdeck.in

Environment variables

Configure production secrets in your hosting provider's secret manager. Use values from your private .env.example — do not paste live credentials into docs, tickets, or chat.

Admin

Admin Setup

Create administrator accounts securely — never use published or default passwords.

Security requirement: Always set a unique admin email and strong password. Disable or remove unused admin accounts. Do not share admin credentials.

Create an admin user

bash
[email protected] ADMIN_PASSWORD=<strong-secret> npm run create-admin

After creation, sign in, enable two-factor authentication if available, and rotate credentials on any non-production environment before go-live.

Admin

Dashboard Guide

Navigate the comprehensive admin dashboard for system management.

Dashboard Tabs

📊 Overview

System stats, health status, and recent activity

👥 Users

User management and role administration

📈 Analytics

Detailed analytics and reporting dashboards

🔍 Monitoring

Real-time system health and performance

💾 Backup

Backup scheduling and recovery management

📝 Logs

System logs and event tracking

Admin

User Management

Manage users, roles, and permissions through the admin panel.

Roles

RoleAccess LevelCapabilities
userStandardCreate analyses, manage own profile
adminElevatedUser management, analytics view
super_adminFullAll features including system config
Using Founder OS

Connecting your tools

How a connection works, what it can and cannot do, and exactly what each tool is read for.

Founder OS gets its numbers from the tools you already use. You connect your own account, either by approving StartupDeckAI in the tool's own screen or with a key you create, and StartupDeckAI only reads from it. It never creates, changes or deletes anything in a connected account.

How to connect a tool

  1. Open Integrations in Founder OS and choose a tool. The Popular and New filters show where to start.
  2. Read the short list of what we read from that tool.
  3. For Stripe, GitHub, Slack, HubSpot and Notion, press Continue with the tool. The tool's own screen asks you to allow the read permissions the dialog lists, and nothing else. No key changes hands.
  4. For every tool, you can instead follow the steps in the dialog to create a key, limit it to read access where the tool allows it, and paste it. We check the key with the tool first.
  5. Either way, what the tool gives us is stored encrypted and the first import starts.

How it stays read only

  • Every request to a connected tool passes through one check that refuses anything other than a read. A few tools use a POST for searching, checking a key or swapping an approval code for a token. Those are listed one by one, and none of them changes anything in your account.
  • When you approve StartupDeckAI in a tool, we ask only for read permissions. Where the tool reports what it granted (Stripe, GitHub, Slack and HubSpot do), we check the grant and refuse to connect if it can do more than read. Notion does not report this, and the dialog says so.
  • Where a tool lets you limit a key to read access, the dialog asks you to do that, so even a mistake on our side could not write. Where a tool cannot, the dialog says so plainly.
  • Requests identify themselves as StartupDeckAI, wait when a tool asks us to slow down, and stop after a few tries.
  • Keys and access tokens are encrypted before they are stored and are never shown again. Tokens that expire are renewed before use and stored the same way.

What stays under your control

  • You choose which repositories, pages, projects or channels a connection can reach, wherever the tool lets you.
  • Revoke the key, or remove StartupDeckAI, in the tool at any time to cut access straight away.
  • Disconnecting in Founder OS deletes the key or token and the records we imported from that tool. For a tool you approved, we also ask the tool to end our access, and tell you if it did not confirm.

What each tool reads

ToolWhat we readHow it connectsProvider terms
Amplitude
  • Totals of daily active users and new users
A key you createTerms
Chargebee
  • Subscriptions: plan, status, recurring amount and billing period
A key you create, limited to read accessTerms
GitHub
  • Repositories you choose
  • Their commits, pull requests and releases: titles, authors and dates
  • Not file contents
Approval in GitHub (we check the grant is read only), or a key you createTerms
HubSpot
  • Contacts: name, email and lifecycle stage
  • Deals: name, amount, stage, close date and which contacts they belong to
Approval in HubSpot (we check the grant is read only), or a key you createTerms
Intercom
  • Conversations: subject, state, rating, reply time and the customer email
  • Not the messages inside them
A key you create, limited to read accessTerms
Jira
  • Issues: title, status, priority, assignee, labels and dates
A key you createTerms
LemonSqueezy
  • Customers
  • Subscriptions: plan, status and amount
  • Orders
A key you createTerms
Linear
  • Issues: title, priority, state, assignee and completion date
A key you create, limited to read accessTerms
Mailchimp
  • Sent campaigns: title, send time, emails sent, open rate and click rate
  • Not your audiences or subscribers
A key you createTerms
Mixpanel
  • People profiles: id, name, email, and when they were first and last seen
  • Not individual events
A key you createTerms
Notion
  • Page and database titles and when they were last edited
  • Only the pages you share with the integration, not their contents
Approval in Notion (the tool does not report the grant), or a key you createTerms
Paddle
  • Subscriptions: plan, status, amount and billing period
  • Completed transactions
A key you create, limited to read accessTerms
Pipedrive
  • Deals, their stages and their value
A key you createTerms
PostHog
  • Event names and how many times each happened, for the project you choose
A key you create, limited to read accessTerms
Razorpay
  • Customers (name and email)
  • Subscriptions and their plans
  • Payments: amount, status and date
A key you createTerms
Sentry
  • Issues: title, how many events and users each affects, and when it was last seen
  • Not stack traces or event details
A key you create, limited to read accessTerms
Slack
  • Channel names and member names with their job titles
  • How many messages each channel received in the last day
  • Not the text of messages: we count them and keep nothing else
Approval in Slack (we check the grant is read only), or a key you createTerms
Stripe
  • Customers (name and email)
  • Subscriptions and their plans
  • Charges: amount, status and date
Approval in Stripe (we check the grant is read only), or a key you createTerms
Vercel
  • Projects and their deployments: status, time and duration
A key you createTerms
Zendesk
  • Tickets: subject, status, priority, dates and the requester's email
  • Not the messages inside them
A key you createTerms
Your agreement with each tool still applies. You connect under the terms you already have with the provider, and you must be allowed to share that account's data with us. Read the Terms of Service, the Privacy Policy and the trademark notice. Product names and logos belong to their owners.
Platform Features

Product features

Tools available in the StartupDeckAI web app. Availability depends on your plan — see Pricing for limits.

StartupDeckAI checks a startup idea before you build it. Pro Plus and Enterprise plans add Founder OS, which helps run the company once it has customers.

Note: Free includes one full validation and two quick analyses a month. See Pricing for what each plan includes.
Security

Two-Factor Authentication (2FA / MFA)

Protect your StartupDeckAI account, analyses, and financial details with industry-grade multi-factor security.

Overview

StartupDeckAI supports two-factor authentication (2FA) for all user accounts. When enabled, logging in via username/password or Google OAuth requires you to verify your identity with a dynamic, single-use 6-digit passcode. This prevents unauthorized access even if your password or OAuth credentials become compromised.

Supported Authentication Methods

📱 Authenticator Apps (TOTP)

Scan a cryptographically secure 2D QR code using standard authenticators like Google Authenticator, Microsoft Authenticator, Authy, or 1Password. Generates time-based, offline tokens refreshed every 30 seconds.

📧 Email One-Time Passcodes (OTP)

Receive a high-entropy, 6-digit verification code directly to your registered email address. Perfect for users who prefer secure verification without needing secondary mobile authenticator apps.

How to Enable 2FA

  1. Log into your account and navigate to Account Settings.
  2. Scroll down to the Security & Two-Factor Authentication section.
  3. Select your preferred method: Authenticator App or Email OTP.
  4. For Authenticator Apps, scan the generated QR code or copy the plaintext secret key. For Email OTP, verify the test code sent to your inbox.
  5. Enter the 6-digit confirmation token to securely activate 2FA.
  6. Copy and store your Emergency Recovery Codes in a safe place. If you ever lose access to your device, these codes are the only way to regain access without administrator intervention.

Login Verification Flow

Once activated, the authentication sequence intercepts access post-credentials check:

1. Login Trigger

User submits email/pass or authenticates via Google/GitHub OAuth.

➔
2. 2FA Intercept

Server checks if user has active 2FA and halts the auth session.

➔
3. Verification

User enters 6-digit TOTP token or Email OTP in secure overlay.

Admin Exemption & Panel Security

For administrative accounts, standard user-level 2FA is deactivated. Instead, administrators must verify their identity using a specialized **Secret Key Verification Challenge Overlay**. This timing-safe, cryptographically hashed challenge must be verified before the system grants access to the high-privilege Admin Panel, ensuring maximum defense for user data and infrastructure control.

Security

Rate Limiting

API protection with configurable rate limits.

Endpoint TypeWindowMax Requests
General API15 minutes1000
AI Analysis1 hour100
Authentication15 minutes20

Rate-limited responses return 429 Too Many Requests with a Retry-After header.

Security

SSL / TLS

Configure secure connections with SSL certificates.

Nginx Configuration

nginx
server {
    listen 443 ssl http2;
    server_name your-domain.com;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    location / {
        proxy_pass http://localhost:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Advanced

Monitoring

Set up comprehensive monitoring for system health and performance.

Error Tracking with Sentry

bash
npm install @sentry/node @sentry/profiling-node

Key Metrics to Track

  • System Health: Database, Redis, and email service status
  • User Analytics: Growth tracking and user behavior
  • Revenue Analytics: MRR, ARR, and financial projections
  • Performance: CPU, memory, and response times
Advanced

Scaling

Scale StartupDeckAI for production workloads.

Database Optimization

sql
-- Add indexes for performance
CREATE INDEX CONCURRENTLY idx_analyses_user_id_created_at
  ON analyses(user_id, created_at);
CREATE INDEX CONCURRENTLY idx_competitors_analysis_id
  ON competitors(analysis_id);
CREATE INDEX CONCURRENTLY idx_usage_tracking_user_id_feature
  ON usage_tracking(user_id, feature);

Load Balancing

nginx
upstream startupdeck_backend {
    server 127.0.0.1:5000;
    server 127.0.0.1:5001;
    server 127.0.0.1:5002;
}
server {
    location / {
        proxy_pass http://startupdeck_backend;
    }
}
Advanced

Troubleshooting

Common issues and their solutions.

Redis Connection Failed

bash
# Check Redis status
sudo systemctl status redis-server
# Restart Redis
sudo systemctl restart redis-server

Database connection issues

Verify your database is running and that connection settings in your private environment file match your deployment. Test from your secure shell — do not share connection strings publicly.

Payment Webhook Failures

bash
# Test webhook endpoint
stripe events resend evt_webhook_id
# Check webhook logs
stripe logs tail