This is a personal learning project I built to understand how to build AI-powered products. As a non-technical Product Manager transitioning into AI-oriented roles, I wanted to learn by building something substantial.
Back in 2022, I co-founded MentorPlus, a startup where we envisioned building exactly what CarNav is today - a platform to help people discover relevant professional profiles and career paths through natural language queries. However, at that time, I lacked the technical skills to build it myself, and we couldn't find the right technical co-founder to bring the vision to life.
Fast forward to 2024-2025, and the landscape has completely changed. With the emergence of AI agents and advanced coding assistants, I realized I finally had the tools to tackle this challenge myself. This project represents not just a learning journey, but steps towards the fulfillment of a vision I've carried for years - finally made possible by AI-powered development tools.
Important Notes:
- This is a learning project, not a production-ready product
- Dataset: ~14,000 LinkedIn profiles (limited scope for learning)
- Built to understand the end-to-end flow of AI-powered systems
- All documentation reflects my learning journey and decision-making process
- Enabled by AI coding assistants - showing what's possible when PMs can build
Through building CarNav, I explored and learned about:
- APIs - How REST APIs work, API design, request/response patterns, error handling
- LLMs - How Large Language Models work, their capabilities and limitations, when to use them
- LLM Fine-tuning - Understanding when and how to fine-tune models, trade-offs involved
- Prompt Engineering - Crafting effective prompts, iterating on prompts, prompt patterns, cost considerations
- Cost, Speed, and Quality Trade-offs - Balancing API costs, response times, and output quality in real-world scenarios
- System Design - Designing end-to-end systems, component interactions, data flow patterns
- Architecture - Understanding data flow, service boundaries, modular design, scalability considerations
- Database Design - MongoDB schema design, indexing strategies, query optimization, performance tuning
- Full-Stack Development - Next.js, React, TypeScript, building complete applications from frontend to backend
One of the key things I learned was how to design a complete system flow that takes a natural language query and returns relevant results:
User Query (Natural Language)
β
LLM Parser (Gemini API)
β
Structured Query (JSON)
β
Search API (/api/search)
β
MongoDB Query Builder
β
MongoDB Database
β
Results Processing
β
Frontend Display
What I learned from each step:
- LLM Parser: How to structure prompts for consistent JSON output, handling edge cases, managing API costs, and iterating on prompt design to improve accuracy
- Search API: Building RESTful endpoints, error handling, input validation, response formatting, and API design patterns
- MongoDB Query Builder: Translating structured queries into MongoDB operations, understanding query performance, and optimizing database interactions
- MongoDB: Query construction, indexing strategies, performance optimization, understanding when to use different query patterns
- Frontend: State management, API integration, user experience design, handling loading states and errors
- Node.js 18+ (LTS version recommended)
- npm or yarn
- MongoDB (for data storage)
- Git
- Clone the repository:
git clone <repository-url>
cd CarNav- Install root dependencies (for scripts):
npm install- Install frontend dependencies:
cd carnav
npm install-
Set up environment variables (root + frontend):
This project intentionally uses two separate env files:
- A root
.envfor backend scripts and data tooling - A
carnav/.env.localfor the Next.js web app
Both have committed example files to guide setup.
# From the repository root: # 1) Backend/scripts environment (root) cp .env.example .env # 2) Frontend (Next.js app) environment cd carnav cp .env.local.example .env.local
Then open each new file (
.envandcarnav/.env.local) and fill in the values as described below and in the comments inside the example files. - A root
-
Run the development server:
cd carnav
npm run devOpen http://localhost:3000 with your browser to see the result.
To keep things clear while learning, the project separates concerns:
-
Root
.env(backend scripts, data tooling)- Based on:
.env.example(committed to git) - Used by: scripts under
scripts/(e.g., data ingestion, image migration, maintenance tools) - Typical variables (see
.env.examplefor the full list and structure):- MongoDB (scripts):
MONGODB_URI,MONGODB_PROD_DB_NAME,MONGODB_PROD_PROFILE_COLLECTION_NAME,MONGODB_TEST_DB_NAME,MONGODB_TEST_PROFILE_COLLECTION_NAME - External APIs:
PROXYCURL_API_KEY,PROXYCURL_SECOND_API_KEY - OpenAI:
OPENAI_API_KEY,OPENAI_BASE_URL,MODEL_NAME - Google Cloud (shared):
GOOGLE_CLOUD_PROJECT_ID,GOOGLE_CLOUD_LOCATION,GOOGLE_API_KEY - Cloudflare R2 (images):
R2_PROFILE_IMAGES_BUCKET_NAME,R2_PROFILE_IMAGES_BUCKET_PUBLIC_URL,R2_PROFILE_IMAGES_BUCKET_S3_API,R2_ACCOUNT_ID,R2_PROFILE_IMAGES_SCRIPT_TOKEN_VALUE,R2_PROFILE_IMAGES_SCRIPT_TOKEN_ACCESS_KEY_ID,R2_PROFILE_IMAGES_SCRIPT_TOKEN_SECRET_ACCESS_KEY
- MongoDB (scripts):
- Based on:
-
carnav/.env.local(Next.js web app)- Based on:
carnav/.env.local.example(committed to git) - Used by: the Next.js app in
carnav/when you runnpm run devor build - Typical variables:
- Firebase (Auth & client SDK):
NEXT_PUBLIC_FIREBASE_API_KEY,NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,NEXT_PUBLIC_FIREBASE_PROJECT_ID,NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,NEXT_PUBLIC_FIREBASE_APP_ID,NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID,FIREBASE_ADMIN_SDK_BASE64 - Google Cloud / Gemini (LLM):
GOOGLE_CLOUD_PROJECT_ID,GOOGLE_CLOUD_LOCATION,GOOGLE_API_KEY,GOOGLE_LLM_MODEL,NEXT_PUBLIC_GOOGLE_OAUTH_CLIENT_ID - MongoDB (app database access):
MONGODB_URI,MONGODB_PROD_DB_NAME,MONGODB_PROD_PROFILES_COLLECTION_NAME,TEST_DB_URI,MONGODB_TEST_DB_NAME,MONGODB_TEST_PROFILES_COLLECTION_NAME
- Firebase (Auth & client SDK):
- Based on:
Mental model while learning:
Think of the root .env as βeverything my backend scripts and infrastructure needβ, and carnav/.env.local as βeverything the web app needs at runtimeβ. The example files in git are your source of truth for which variables exist and what they conceptually represent.
- Framework: Next.js 14 - Learned server-side rendering, API routes, and React patterns
- Language: TypeScript - Learned type safety, interfaces, and how types help catch errors early
- Styling: Tailwind CSS v4 - Learned utility-first CSS, responsive design, and design system implementation
- UI Components: Custom component library - Learned component design, reusability, and composition patterns
- State Management: React Context API - Learned state management patterns and when to use context vs props
- Runtime: Node.js - Learned Node.js runtime, async patterns, and server-side JavaScript
- API: Next.js API Routes - Learned REST API design, request handling, and response formatting
- Database: MongoDB - Learned NoSQL database design, querying, indexing, and optimization
- Authentication: Firebase Auth (Google OAuth) - Learned OAuth flows and authentication patterns
- LLM Provider: Google Gemini API - Learned LLM API integration, prompt engineering, and cost management
- Query Parsing: Custom prompt-based parser - Learned how to structure prompts for consistent structured output
- Linting: ESLint - Learned code quality and consistency
- Testing: Jest - Learned testing patterns and test-driven development
- Package Manager: npm - Learned dependency management
CarNav/
βββ carnav/ # Next.js frontend application
β βββ src/
β β βββ components/ # React components
β β βββ pages/ # Next.js pages and API routes
β β βββ lib/ # Utility functions and types
β β βββ models/ # Data models
β β βββ styles/ # Global styles
β βββ public/ # Static assets
βββ scripts/ # Backend scripts and utilities
β βββ core_logic/ # Core business logic
β βββ data_processing/ # Data processing scripts
β βββ testing/ # Test utilities
βββ documentation/ # Project documentation (learning artifacts)
β βββ core/ # Core project docs (PRD, Technical Details)
β βββ architecture/ # Architecture and sequence diagrams
β βββ development/ # Implementation plans and planning
β βββ reference/ # Reference materials
βββ data/ # Data files (gitignored)
Comprehensive documentation is available in the documentation/ directory. These documents represent my learning journey - what I explored, what I decided, and why:
- Core Documentation - PRD, Project Plan, Technical Details, Design Details
- Architecture - System architecture and sequence diagrams showing the learning flow
- Development - Implementation plans showing the learning and iteration process
- Reference - Component library and reference materials
See the Documentation README for a complete guide to navigating these learning artifacts.
- Use TypeScript for all new files
- Follow the ESLint configuration
- Use meaningful component and variable names
- Write comprehensive comments for complex logic (especially important for learning)
- Create a new branch for each feature/fix
- Follow conventional commits
- Submit PR for review
- Squash and merge after approval
cd carnav
npm test- Sashank Kuppa - Initial work and development (learning journey)
- Documentation - Complete documentation index
- Technical Details - Deep dive into technical implementation
- Design Details - Design system and UX guidelines
- Architecture - System architecture and data flow