Awesome-omni-skill PolicyPulse Development
AI-powered synthetic population simulator with clean architecture, Python type safety, and professional dashboard design patterns
install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data-ai/policypulse-development" ~/.claude/skills/diegosouzapw-awesome-omni-skill-policypulse-development-e169e1 && rm -rf "$T"
manifest:
skills/data-ai/policypulse-development/SKILL.mdsource content
PolicyPulse Development
This skill guides AI agents in developing PolicyPulse, a professional analytical tool for stress-testing policies against synthetic populations using hybrid AI (LLM + Neural Network).
When to use
Activate this skill when:
- Building or modifying PolicyPulse application code
- Creating modular Python components following clean architecture
- Designing dashboard UI components for Streamlit
- Implementing type-safe Python code with proper annotations
- Writing tests for PolicyPulse functionality
Core Principles
1. Document-Driven Development
- Source of Truth: PRD.md, DESIGN_DOC.md, and TECH_STACK.md are authoritative
- No Feature Invention: Only implement features explicitly defined in documents
- Incremental Progress: Small, safe steps that keep the project runnable
- No Summary Documents: Don't create documentation unless explicitly requested
2. Clean Architecture (Modular Monolith)
Follow the defined module structure:
app.py # Entry point, session management ui_sections.py # UI component rendering simulation.py # Simulation orchestration llm_client.py # Gemini API wrapper nn_model.py # Neural network training/inference population.py # Synthetic citizen generation stats.py # Aggregation and statistics data_models.py # Dataclass definitions utils.py # Helper functions config.py # Environment loading ml_data.py # Training dataset management
Module Dependency Rules:
has no dependencies (stdlib only)data_models.py
is imported by app.py onlyconfig.py- UI layers depend on business logic, not vice versa
- External dependencies (genai, sklearn) isolated in specific modules
3. Python Type Safety
- Always use type hints: Function signatures, variables, return types
- Leverage Python 3.10+ features:
- Dataclasses for data models
- Union types with
syntax (e.g.,|
)str | None - Type aliases for complex types
- Example Pattern:
from dataclasses import dataclass from typing import Literal @dataclass class Citizen: id: int age: int income_level: Literal["Low", "Middle", "High"] happiness: float def calculate_average(citizens: list[Citizen]) -> float: return sum(c.happiness for c in citizens) / len(citizens)
4. Professional Dashboard Design
- Data Density without Overwhelm: Show comprehensive info in digestible chunks
- Progressive Disclosure: Start simple, reveal complexity on demand
- Sidebar + Main Content: Sidebar for config (300-320px fixed), main area for results
- Muted Professional Palette:
- Primary: Deep Purple (#667EEA)
- Semantic: Teal (positive), Coral (negative)
- Neutrals: Charcoal text, Pearl backgrounds
- Tabbed Analysis: Overview, Demographics, Individuals, Experts, AI Insights, Compare
- Metric Cards: Large bold values, small change indicators with colored arrows
- Responsible AI: Prominent disclaimer that this is synthetic simulation, not prediction
5. Streamlit-Specific Patterns
- Session State: Use
for simulation results, populations, modelsst.session_state - File Persistence: Save models to
, training data tomodels/
as CSV/Joblibdata/ - Component Organization: Separate UI rendering from business logic
- Layout Structure:
# Sidebar config with st.sidebar: # Population, steps, mode, policy config pass # Main content with tabs tab1, tab2, tab3 = st.tabs(["Overview", "Demographics", "Individuals"]) with tab1: # Metrics cards, time-series charts pass
Implementation Guidelines
Data Models First
- Define dataclasses in
with full type annotationsdata_models.py - Include docstrings explaining purpose and constraints
- Use
for immutable datafrozen=True
Business Logic Isolation
- Keep simulation logic in
,simulation.py
,population.pynn_model.py - No Streamlit imports in business logic modules
- Return structured data (dataclasses, DataFrames), not UI components
UI Components
- UI rendering functions in
ui_sections.py - Accept typed data structures as parameters
- Use Plotly for charts (
)st.plotly_chart(fig, use_container_width=True) - Follow design system: spacing (8px base), typography (Inter font), colors
Error Handling
- Graceful degradation: LLM → NN → Rule-based fallback
- User-friendly error messages in UI
- Log technical details for debugging
- Never crash the app; show error state and recovery options
Testing Patterns
- Unit tests for business logic (population generation, stats calculations)
- Integration tests for simulation workflow
- Mock external dependencies (Gemini API)
- Validate type contracts with pytest
File Organization
policypulse/ ├── .streamlit/ │ └── config.toml # Streamlit configuration ├── data/ │ └── llm_training_samples.csv # Persistent training data ├── models/ │ ├── citizen_reaction_model.joblib # Trained NN │ └── feature_scaler.joblib # Feature normalization ├── src/ # Source code modules │ ├── app.py │ ├── ui_sections.py │ ├── simulation.py │ ├── llm_client.py │ ├── nn_model.py │ ├── population.py │ ├── stats.py │ ├── data_models.py │ ├── utils.py │ ├── config.py │ └── ml_data.py ├── tests/ # Test files ├── requirements.txt # Python dependencies ├── .env.example # Template for API keys ├── .gitignore └── README.md
Technology Stack Constraints
- Python: 3.10+ only (for dataclasses, type hints, pattern matching)
- Web Framework: Streamlit (no React, Flask, or alternatives)
- LLM: Google Gemini (free tier: 15 req/min, 200/day)
- ML: Scikit-learn MLPRegressor (no PyTorch, TensorFlow)
- Data: Pandas + NumPy (no Spark, Dask)
- Charts: Plotly (no Matplotlib, Altair)
- Persistence: File-based CSV/Joblib (no databases)
Anti-Patterns to Avoid
❌ Don't:
- Invent features not in PRD
- Create React/JavaScript frontends
- Use databases (PostgreSQL, MongoDB, etc.)
- Add user authentication/accounts
- Create pixel-perfect custom CSS (accept Streamlit's design)
- Parallelize with threading (Python GIL limitations)
- Make predictive accuracy claims in UI
✅ Do:
- Follow the three source documents strictly
- Use Streamlit's built-in components
- Implement file-based persistence
- Maintain session-based architecture
- Show prominent "synthetic simulation" disclaimers
- Implement graceful LLM fallbacks
Quick Reference
Adding a New Feature
- Verify it's in PRD.md
- Check DESIGN_DOC.md for UI specs
- Review TECH_STACK.md for implementation patterns
- Create/update data models if needed
- Implement business logic (pure Python)
- Add UI rendering (Streamlit components)
- Write tests
- Keep project runnable at each step
Code Review Checklist
- Type hints on all functions and class attributes
- Dataclasses used for structured data
- No Streamlit imports in business logic modules
- Error handling with graceful degradation
- Follows design system (colors, spacing, typography)
- Matches PRD feature specifications exactly
- No invented functionality outside documents