We're harnessing AI to improve policy design, helping users search, synthesise, and simulate policy interventions.
Find more information on the website.
Policy Atlas is a web application designed to streamline policy evidence exploration. Currently in prototype phase, it provides:
- Search: Query academic and policy papers (coming soon)
- Synthesis: AI-powered research synthesis across multiple sources (coming soon)
- Simulation: Policy outcome modeling based on evidence (coming soon)
- Next.js 14 (App Router) - React framework
- TypeScript - Type safety
- Tailwind CSS - Styling
- shadcn/ui - UI component library
- NextAuth.js v5 - Authentication
- FastAPI - Python web framework
- uv - Python package manager
- httpx - Async HTTP client
- OpenAlex API - Academic paper database
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher)
- Python (v3.10 or higher)
- uv - Python package manager (install instructions)
git clone https://github.com/yo
8000
urusername/discovery_policy_atlas.git
cd discovery_policy_atlas
# Navigate to frontend directory
cd frontend
# Install dependencies
npm install --legacy-peer-deps
# Create environment file
cp .env.example .env.local
# Generate auth secret
openssl rand -base64 32
# Copy the output and add it to .env.local as AUTH_SECRET
# Your .env.local should look like:
# AUTH_SECRET=your-generated-secret-here
# NEXTAUTH_URL=http://localhost:3000
# Open a new terminal and navigate to backend directory
cd backend
# Install dependencies using uv
uv sync
# Create environment file
cp .env.example .env
# Your .env should contain:
# OPENALEX_EMAIL=your-email@example.com # Optional but recommended by OpenAlex
You'll need two terminal windows:
Terminal 1 - Backend:
cd backend
uv run python main.py
# Backend will run on http://localhost:8000
# API docs available at http://localhost:8000/docs
Terminal 2 - Frontend:
cd frontend
npm run dev
# Frontend will run on http://localhost:3000
- Open http://localhost:3000 in your browser
- Log in with test credentials:
- Email:
test@example.com
- Password:
password123
- Email:
- Navigate to the Search tab
- Try searching for "heat pumps" or any academic topic
The project uses pre-commit hooks to ensure code quality. The hooks are configured in backend/.pre-commit-config.yaml
and handle both frontend and backend linting:
- Backend: Uses Ruff for Python linting and formatting
- Frontend: Uses ESLint for TypeScript/JavaScript linting
To set up pre-commit hooks:
# Navigate to backend directory
cd backend
# Install dev dependencies (includes pre-commit)
uv sync --dev
# Install the git hooks
uv run pre-commit install
# Check all files
uv run pre-commit run --all-files
discovery_policy_atlas/
│
├── backend/
│ ├── app/
│ │ ├── api/ # FastAPI routes (e.g., routes.py)
│ │ ├── core/ # Core models and config (models.py, config.py)
│ │ ├── services/ # Main backend services
│ │ ├── utils/ # Utility modules
│ │ └── ...
│ ├── main.py
│ └── .venv/ # Python virtual environment
│
├── frontend/
│ ├── app/ # Next.js app directory
│ ├── components/
│ │ ├── search/ # Search-related React components
│ │ ├── ui/ # UI primitives/components
│ │ └── ...
│ ├── types/ # TypeScript types
│ ├── public/ # Static assets
│ ├── lib/ # Frontend utility libraries
│
├── docs/
AUTH_SECRET= # Generate with: openssl rand -base64 32
NEXTAUTH_URL=http://localhost:3000
OPENALEX_EMAIL= # Your email (optional, for OpenAlex politeness)
- Search result screening and synthesis with LLMs
- Database integration (PostgreSQL) and "project management" implementation
- Real user authentication
- PDF processing
- Deployment to cloud
This is currently a prototype. For major changes, please open an issue first to discuss what you would like to change.