Skip to content

jroneil/ExceliorHire

Repository files navigation

ExceliorHire

AI-assisted resume & job application platform (Portfolio Case Study)

Status: Portfolio / Case Study (not an actively marketed SaaS)

ExceliorHire is a full-stack project built to explore how LLM-powered features fit into real product workflows with practical constraints: cost, latency, failure modes, and guardrails.

What this demonstrates

  • End-to-end product build: auth, UX flows, backend APIs, and persistence
  • AI feature integration patterns (orchestration vs business logic separation)
  • Multi-tenant data modeling and safe per-user scoping
  • Paywall/billing wiring (Stripe price mapping, plan catalog)

Quick Links

  • Local Development Guide: docs/local_development.md
  • Test & Validation Plan: docs/test_validation_plan.md
  • Customer Acceptance Test Plan: docs/customer_acceptance_test_plan.md
  • Stripe Pricing Setup: docs/stripe_pricing_setup.md

Technical Overview

ExceliorHire Backend Skeleton

This repository contains a FastAPI backend skeleton with a Postgres database schema and Docker configuration to bootstrap the ExceliorHire project.

Project Structure

backend/
├── app/
│   ├── api/
│   │   ├── deps.py
│   │   └── routes/
│   │       └── health.py
│   ├── core/
│   │   └── config.py
│   ├── db/
│   │   ├── base.py
│   │   └── session.py
│   └── main.py
├── requirements.txt
└── tests/
    └── test_health.py

db/
└── init/
    └── 001_create_tables.sql

Getting Started

Prerequisites

  • Docker and Docker Compose

Running with Docker Compose

  1. Build and start the services:

    docker-compose up --build
  2. Access the API at:

    • http://localhost:8000/health
  3. Connect to Postgres:

    • postgresql://exceliorhire:exceliorhire@localhost:5432/exceliorhire

To stop the stack:

docker-compose down

Running Tests Locally

  1. Install dependencies:

    python -m venv .venv
    source .venv/bin/activate
    pip install -r backend/requirements.txt
  2. Execute tests:

    cd backend && pytest -q

Database Schema

The db/init/001_create_tables.sql script initializes core tables:

  • user_profile
  • resume_records
  • job_applications

These tables include UUID primary keys, timestamps, and indexes on user_id for quick lookups.


Generated Content Storage

Generated resumes and application materials (tailored resumes, cover letters, interview answers, intro scripts, thank-you emails) are not stored in the database. Users should copy or download results before leaving the page. Generated outputs are session-scoped and ephemeral.

The system tracks usage metrics for billing and plan enforcement, but does not persist generated content itself.


Environment Variables

The FastAPI application reads configuration via environment variables:

  • DATABASE_URL – SQLAlchemy connection string for Postgres
  • ENVIRONMENTlocal, staging, etc.
  • DEBUG – set to 1 to enable debug mode

You can override defaults by creating a .env file in the project root.

Stripe pricing configuration

Billing and paywall behavior depends on Stripe price identifiers matching the plan catalog in backend/app/core/plan_catalog.py.

Follow docs/stripe_pricing_setup.md to create Products/Prices and map their price_xxx values to environment variables such as:

  • STRIPE_PRICE_MONTHLY
  • STRIPE_PRICE_RECRUITER_PRO

What I’d Improve If Rebuilding Today (short)

  • Consolidate “product vs platform” scope earlier (avoid SaaS creep)
  • Reduce moving parts and optimize for solo maintainability
  • Treat docs, prompts, and debugging playbooks as first-class artifacts from day one

About

ExceliorHire is a full-stack project built to explore how LLM-powered features fit into real product workflows with practical constraints: cost, latency, failure modes, and guardrails.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors