Fintech Frontend + Backend Prototype is a streamlined, AI-driven platform that connects startups with investors through intelligent matching. It integrates a Vite-based frontend with a FastAPI backend to deliver a fast, modular, and scalable system.
Startups upload pitch decks, investors define their thesis and preferences, and the platform generates high-quality matches on both sides. An embedded AI service produces personalized introduction emails, reducing friction in initial outreach.
The system follows a clean three-layer architecture, client interface, API layer, and data layer, using an in-memory store for rapid prototyping with clear extensibility toward production-grade databases. Core workflows include deck ingestion, investor onboarding, bidirectional match discovery, and AI-assisted communication, all accessible through well-documented APIs via Swagger.
cd backend
pip install -r requirements.txt
cp .env.example .env
# paste your real OPENAI_API_KEY in backend/.env
uvicorn main:app --reload --port 8000API base URL from frontend: http://localhost:8000
POST /startup/upload-deck— upload a startup pitch deck PDFGET /startup/{id}/matches— get investor matches for a startupPOST /investor/register— register investor thesis/preferencesGET /investor/{id}/dealflow— get startup dealflow for investorGET /intro/{startup_id}/{investor_id}— generate intro emailGET /docs— interactive Swagger docs
npm install
npm run devOpen Vite local URL (typically http://localhost:5173).
Redis speeds up expensive GPT match scoring on the backend and lets Node tooling share the same cache namespace.
docker compose up -d redis
cp .env.example .env # REDIS_URL for Node scripts
cp backend/.env.example backend/.env # REDIS_URL + OPENAI_API_KEY for FastAPI- Python backend — uses
redis(seebackend/redis/); cachesGET /startup/{id}/matchesfor 5 minutes whenREDIS_URLis set. - Node (
ioredis) —server/redis/helpers for scripts and tooling; samefintech-et:key prefix. Import only from Node, not from React components.
When REDIS_URL is unset, the API and helpers fall back to uncached behaviour.
- Frontend auth is currently local/demo mode (no backend auth API).
- Use any non-empty
name,email, andpasswordto continue. - Role selected on sign-in decides dashboard route:
startup→ startup dashboardinvestor→ investor dashboard
- Session is persisted in localStorage; use the
Logoutbutton to clear it.
- Users first land on a simple auth screen and choose role (
startuporinvestor). - Startup users are routed to startup dashboard flow.
- Investor users are routed to investor dashboard flow.
After backend is running on http://localhost:8000, run the following in a new terminal.
curl -s -X POST http://localhost:8000/investor/register \
-H "Content-Type: application/json" \
-d '{
"partner_name":"Priya Mehta",
"firm_name":"Nexus Venture Partners",
"thesis":"We back fintech infrastructure startups in India.",
"sectors":"Fintech, SaaS",
"stages":"Seed, Series A"
}'Copy the investor_id from response.
curl -s -X POST http://localhost:8000/startup/upload-deck \
-F "file=@/absolute/path/to/pitch-deck.pdf"Copy the startup_id from response.
curl -s "http://localhost:8000/startup/<startup_id>/matches"curl -s "http://localhost:8000/investor/<investor_id>/dealflow"curl -s "http://localhost:8000/intro/<startup_id>/<investor_id>"curl -s "http://localhost:8000/india-investor/opportunity-radar"
curl -s "http://localhost:8000/india-investor/chart-patterns/RELIANCE"
curl -s -X POST "http://localhost:8000/india-investor/market-chat" \
-H "Content-Type: application/json" \
-d '{"question":"Any near-term breakout opportunities?","portfolio":["INFY","HDFCBANK"]}'