Your Air Force EPB Writing Assistant
My EPBuddy is a web application that helps Air Force enlisted supervisors (primarily SSgt/TSgt) and their subordinates track accomplishments and generate high-quality, myEval-ready Enlisted Performance Brief (EPB) narrative statements compliant with AFI 36-2406.
- π Authentication - Email/password and Google OAuth via Supabase Auth
- π₯ Role-Based Access - Supervisor and subordinate roles with proper permissions
- π Accomplishment Tracking - Structured entries with action verbs, details, impact, and metrics
- β¨ AI-Powered Generation - Generate EPB statements using GPT-4, Claude, Gemini, or Grok
- π Team Management - Supervisors can manage and track subordinate progress
- π myEval Ready - Clean, plain-text output with character counting (β€350)
- π User API Keys - Bring your own API keys for each provider (encrypted storage)
- βοΈ Admin Config - Dynamic EPB configuration including prompts and MPAs
- π± Responsive Design - Works on desktop, tablet, and mobile
- π Dark Mode - System-aware theme switching
- Framework: Next.js 15+ (App Router)
- Language: TypeScript
- Styling: Tailwind CSS + shadcn/ui (Mira preset)
- Database: Supabase (PostgreSQL)
- Authentication: Supabase Auth
- AI: Vercel AI SDK (OpenAI, Anthropic, Google, xAI)
- State Management: Zustand
- Deployment: Vercel
- Node.js 18+
- npm or pnpm
- Supabase account
- API keys for at least one AI provider (OpenAI, Anthropic, Google, or xAI)
- Clone the repository:
git clone https://github.com/yourusername/myepbuddy.git
cd myepbuddy- Install dependencies:
npm install- Copy the environment file:
cp .env.example .env.local- Configure your environment variables in
.env.local:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Fallback LLM API Keys
OPENAI_API_KEY=your_openai_api_key
ANTHROPIC_API_KEY=your_anthropic_api_key
GOOGLE_GENERATIVE_AI_API_KEY=your_google_api_key
XAI_API_KEY=your_xai_grok_api_key-
Create a new Supabase project at supabase.com
-
Run the migrations:
# Local development
npm run db:push:local
# Production
npm run db:push:remoteOr manually run the SQL files in supabase/migrations/ in order:
001_initial_schema.sql- Creates tables and functions002_rls_policies.sql- Sets up Row Level Security
- Enable Google OAuth in Supabase Dashboard:
- Go to Authentication > Providers
- Enable Google provider
- Configure OAuth credentials
npm run devOpen http://localhost:3000 in your browser.
- Navigate to Entries from the sidebar
- Click New Entry
- Fill in the form:
- Date: When the accomplishment occurred
- MPA: Major Performance Area (Executing Mission, Leading People, etc.)
- Action Verb: Strong verb describing what you did (Led, Managed, etc.)
- Details: What you accomplished
- Impact: The results or outcome
- Metrics: Quantifiable numbers (optional but recommended)
- Go to Generate EPB
- Select the ratee (yourself or a subordinate)
- Choose an AI model
- Click Generate EPB Statements
- Review the generated statements
- Copy individual statements or download all as text
- Navigate to My Team
- Click Add Subordinate
- Enter their email address (they must have signed up first)
- They will appear in your team list
- View all subordinate entries from the Entries page
- Use the filter dropdown to select a specific subordinate
- Create entries on behalf of subordinates
- Go to Settings > API Keys
- Enter your API keys for any provider:
- OpenAI (for GPT-4o, GPT-4o Mini)
- Anthropic (for Claude models)
- Google (for Gemini models)
- xAI (for Grok)
- Click Save API Keys
Your keys are encrypted before storage and only decrypted during generation.
Administrators can customize EPB settings at /admin/config:
- Max Characters: Default statement character limit
- SCOD Date: Static Closeout Date
- Cycle Year: Current evaluation year
- Major Performance Areas: Add/remove MPAs
- Style Guidelines: Writing guidelines for AI
- System Prompt: Full AI prompt template
- Rank Verb Progression: Rank-appropriate verbs
-
Push your code to GitHub
-
Connect to Vercel:
- Go to vercel.com
- Import your GitHub repository
- Configure environment variables
- Deploy
-
Configure Supabase for production:
- Update OAuth redirect URLs
- Ensure RLS policies are active
src/
βββ app/
β βββ (app)/ # Protected app routes
β β βββ dashboard/
β β βββ entries/
β β βββ generate/
β β βββ team/
β β βββ settings/
β β βββ admin/
β βββ (auth)/ # Auth routes
β β βββ login/
β β βββ signup/
β βββ api/
β β βββ generate/ # AI generation endpoint
β βββ auth/
β βββ callback/ # OAuth callback
βββ components/
β βββ entries/ # Entry-related components
β βββ layout/ # App layout components
β βββ providers/ # Context providers
β βββ ui/ # shadcn/ui components
βββ lib/
β βββ supabase/ # Supabase clients
β βββ constants.ts
β βββ utils.ts
βββ stores/ # Zustand stores
βββ types/ # TypeScript types
| Variable | Description | Required |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Supabase project URL | Yes |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Supabase anon key | Yes |
SUPABASE_SERVICE_ROLE_KEY |
Supabase service role key | Yes |
NEXT_PUBLIC_APP_URL |
Your app URL | Yes |
OPENAI_API_KEY |
OpenAI API key (fallback) | Recommended |
ANTHROPIC_API_KEY |
Anthropic API key (fallback) | Optional |
GOOGLE_GENERATIVE_AI_API_KEY |
Google AI key (fallback) | Optional |
XAI_API_KEY |
xAI/Grok API key (fallback) | Optional |
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
MIT License - see LICENSE file for details.
This application is not affiliated with, endorsed by, or connected to the U.S. Air Force, Department of Defense, or any government entity. It is a personal productivity tool designed to assist with EPB preparation.
Built with β€οΈ for Air Force supervisors and their teams.