Professional Clarity
ALIGN is a specialized tool designed to help professionals navigate workplace situations during menopause transitions with grace and authority. Leveraging advanced AI, it provides reframes, scientific context, and professional scripts tailored for various communication channels.
- Reframe: Validates your experience with professional grace and calm authority.
- Science: Provides evidence-based neurobiological context for symptoms.
- Scripts: Generates ready-to-use professional responses for Email, Slack, or In-Person interactions.
- Frontend: React (Vite) + Tailwind CSS
- Backend: Express.js (API proxy, rate limiting, security headers)
- Language: TypeScript / JavaScript
- AI Integration: Google GenAI SDK (Gemini) — server-side only
Browser ──► Vite (dev) / Static files (prod)
│
▼
Express Server (/api/generate)
│
▼
Google Gemini API
The Gemini API key never reaches the client. All AI requests are proxied through the Express backend server, which also enforces rate limiting, input validation, and security headers.
- Node.js (v20 or higher recommended)
- npm (or yarn/pnpm)
- Google GenAI API Key
-
Clone the repository:
git clone <repository-url> cd align
-
Install dependencies:
npm install
-
Set up environment variables:
cp .env.example .env
Then edit
.envand add your actual Gemini API key:GEMINI_API_KEY=your_api_key_here -
Run in development mode:
npm run dev
This starts both the Vite dev server (port 3000) and the Express API server (port 8080). The Vite dev server proxies
/apirequests to the backend. -
Open
http://localhost:3000in your browser.
-
Build the frontend:
npm run build
-
Start the production server:
npm start
This serves the built frontend and API from a single Express server on port 8080 (configurable via
PORTenv var).
- API key isolation: Gemini key stays server-side; never bundled into client code
- Rate limiting: 30 requests per 15-minute window per IP
- Input validation: Length limits, control character stripping
- Security headers: Helmet.js (CSP, HSTS, X-Frame-Options, etc.)
- Body size limit: 10KB max request body
- No source maps in production builds
We welcome contributions! Please read CONTRIBUTING.md and our Code of Conduct before opening issues or pull requests. Contributions can include bug fixes, new features, documentation improvements, or tests.
If you'd like to support development, consider sponsoring the project or visiting our funding page. The .github/FUNDING.yml file lists available options.
MIT License