Skip to main content

Welcome to Conformly.ai

Get up and running with Conformly.ai in just a few steps. The platform consists of three projects:
ProjectPurposeLocal URL
conformly-coreFastAPI backend (Docker)http://localhost:8000
conformly-frontendPlatform app (React/Vite)http://localhost:8080
conformly-webMarketing site (React/Vite)http://localhost:5173

Prerequisites

  • Docker and Docker Compose (for backend)
  • Node.js 18+ and Yarn (for frontends)
  • Supabase account with project configured
  • Google API key (for AI services)
  • Stripe account (for payment integration)

Quick Start

1. Backend Setup (Docker)

cd conformly-core
cp env.example .env
# Edit .env with your Supabase, Stripe, and AI credentials

docker compose up -d
This starts the FastAPI backend, Redis, Celery worker, and Celery Beat. The backend runs with --reload enabled so code changes are picked up automatically.

2. Platform Frontend Setup

cd conformly-frontend
yarn install
yarn dev
The app runs at http://localhost:8080 with Vite HMR.

3. Marketing Site Setup (Optional)

cd conformly-web
yarn install
yarn dev
The marketing site runs at http://localhost:5173.

4. Verify Everything

# Backend health
curl http://localhost:8000/health

# API docs
open http://localhost:8000/docs

# Platform app
open http://localhost:8080

# Marketing site
open http://localhost:5173

Environment Configuration

Each project has its own .env file. The key cross-references:
VariableProjectLocal Dev Value
VITE_API_BASE_URLconformly-frontendhttp://localhost:8000/api/v1
VITE_WEB_URLconformly-frontendhttp://localhost:5173
VITE_API_BASE_URLconformly-webhttp://localhost:8000/api/v1
VITE_APP_URLconformly-webhttp://localhost:8080
ALLOWED_ORIGINSconformly-corehttp://localhost:5173,http://localhost:8080
STRIPE_SUCCESS_URLconformly-corehttp://localhost:8080/payment-success?session_id={CHECKOUT_SESSION_ID}
STRIPE_CANCEL_URLconformly-corehttp://localhost:5173/#pricing

User Signup and Subscription Flow

  1. New users sign up at /signup on the platform frontend.
  2. The Supabase handle_new_user() trigger creates a profile row with subscription_status = 'inactive'.
  3. On login, the frontend calls POST /auth/sync which activates the free plan automatically (sets subscription_status = 'active', subscription_plan = 'free').
  4. For paid plans, users go through Stripe Checkout from the marketing site pricing section. After payment, the Stripe webhook updates the profile or creates a pending_subscription that is claimed on next login.
  5. The ProtectedRoute component checks subscription_status via GET /auth/me and redirects to /subscribe if the user has no active subscription.

Next Steps

Backend Configuration

Configure environment variables

API Reference

Explore the API endpoints

Docker Deployment

Deploy using Docker Compose

Run Your First Analysis

  1. Upload a standard and a work product in the app.
  2. Start a gap analysis (multi-standard supported) from the workflow or via the API:
curl -X POST "http://localhost:8000/api/v1/analysis/gaps?standard_ids=std-uuid&work_product_ids=wp-uuid&workspace_id=ws-uuid" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"
  1. Track progress by listing analyses for your workspace and open the latest run.
  2. Open Reports to triage findings. Use filters for severity, status, and standard.
  3. Click View in history to open the Gap Analysis Viewer:
    • Click findings to highlight matching text in the document
    • Export a structured report and “Save as PDF” from the browser print dialog
  4. Update gap status inline (Open / In progress / Resolved / Accepted) to track remediation.