A platform that connects research, portfolio monitoring, and journaling into one disciplined investment workflow.
See vision.md for the full product vision.
Research — Idea inbox, kill screening, company & sector research, AI assistant Portfolio — Position tracking, thesis vs reality, checkpoints, AI analytics Journal — Decision journal, mistake log, learning insights
Idea or Market Sweeper
→ Kill Screen
→ Research ←──────────────┐
→ Buy Decision │
→ Track Position Updated Checklist
→ Journal │
→ Learn |───────────────┘
- Backend: Python 3.12, Flask, PostgreSQL (pgvector), Celery + Redis
- Frontend: Jinja2 + React components, Bootstrap, Webpack
- AI: Gemini, OpenAI, and Anthropic (via YAML prompt templates)
The easiest way to run the platform locally. Requires Docker and Docker Compose.
cp .env.example .envEdit .env and fill in the Auth0 and AI keys (see Environment Variables below).
DATABASE_URLandREDIS_URLare set automatically by Docker Compose — any values in.envare overridden.
docker compose up --build -dThe app will be available at http://localhost:8000.
| Service | Description | Port |
|---|---|---|
| web | Flask app via Gunicorn | 8000 |
| db | PostgreSQL 16 + pgvector | 5432 |
| redis | Redis 7 (Celery broker + cache) | 6379 |
| worker | Celery background worker | — |
Database migrations run automatically on startup.
# View logs
docker compose logs -f web
docker compose logs -f worker
# Restart after .env changes
docker compose restart web
# Stop everything
docker compose down
# Stop and wipe database
docker compose down -v- Register an account through the UI
- Ensure your email is listed in
ADMIN_EMAILSin.env - Restart:
docker compose restart web - Navigate to
/admin
Requires Python 3.12+, PostgreSQL with the pgvector extension, Redis, and Node.js.
git clone https://github.com/warlock20/StartWithA.git
cd StartWithA
# Python
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
# Frontend
npm ci && npm run build
# Environment
cp .env.example .env
# Edit .env — set DATABASE_URL, REDIS_URL, Auth0 keys, etc.
# Database
flask db upgrade
# Run
flask runStart the Celery worker in a separate terminal:
celery -A celery_app worker --loglevel=infoCopy .env.example to .env. Docker Compose sets DATABASE_URL and REDIS_URL automatically — only set those if running without Docker.
| Variable | Description |
|---|---|
SECRET_KEY |
Flask session secret — any random string |
AUTH0_DOMAIN |
Your Auth0 tenant domain (e.g. your-tenant.auth0.com) |
AUTH0_CLIENT_ID |
Auth0 application client ID |
AUTH0_CLIENT_SECRET |
Auth0 application client secret |
AUTH0_CALLBACK_URL |
OAuth callback URL (http://localhost:8000/auth/callback for Docker) |
AUTH0_AUDIENCE |
Auth0 API audience (usually https://<domain>/userinfo) |
GEMINI_API_KEY |
Google Gemini API key — at least one AI provider is needed |
| Variable | Description | Default |
|---|---|---|
OPENAI_API_KEY |
OpenAI API key (alternative AI provider) | — |
ANTHROPIC_API_KEY |
Anthropic API key (alternative AI provider) | — |
NEWS_API_KEY |
NewsAPI key for market news | — |
ADMIN_EMAILS |
Comma-separated emails that get admin access | — |
DATABASE_URL |
PostgreSQL connection string | set by Docker Compose |
REDIS_URL |
Redis connection string | set by Docker Compose |
DEFAULT_USER_TIER |
Default tier for new users (free or premium) |
free |
FLASK_DEBUG |
Enable debug mode | False |
SESSION_COOKIE_SECURE |
Require HTTPS for cookies | True |
UPLOAD_FOLDER |
Path for file uploads | instance/uploads |
The app uses Auth0 for authentication. To set it up:
- Create a free account at auth0.com
- Create a Regular Web Application
- In Settings, set Allowed Callback URLs to:
http://localhost:8000/auth/callback(Docker)http://localhost:5000/auth/callback(localflask run)
- Copy Domain, Client ID, and Client Secret into your
.env
Don't want to self-host? A managed, hosted instance is available — open a discussion to request access.
- Fork the repo and create a feature branch
- Make your changes
- Run the app locally to verify everything works
- Open a pull request
Please keep PRs focused — one feature or fix per PR.
This project is licensed under the GNU Affero General Public License v3.0.
You can use, modify, and distribute this software freely. If you run a modified version on a server, you must make your source code available to users of that server. See the full license text for details.