FastAid e uma plataforma de apoio operacional para incidentes, com:
- backend em FastAPI + SQLModel
- frontend em React + Vite
- base de dados PostgreSQL
- stack completa via Docker Compose
O frontend consome a API do backend por /api, tanto em desenvolvimento como em Docker.
- Backend: FastAPI, SQLModel, Uvicorn, Pydantic Settings
- Frontend: React, TypeScript, Vite, React Router, Leaflet
- Base de dados: PostgreSQL 17
- Infra: Docker, Docker Compose, GitHub Actions
.
├── backend
│ ├── Dockerfile
│ ├── requirements.txt
│ └── src
├── frontend/fastaid
│ ├── Dockerfile
│ ├── nginx.conf
│ └── src
├── .github/workflows
└── docker-compose.yml
- Python 3.13
- Node.js 24+
- npm
- PostgreSQL 17
Na raiz do projeto existe um exemplo para Docker:
cp .env.example .envPara o backend local:
cp backend/.env.example backend/.envPara o frontend local:
cp frontend/fastaid/.env.example frontend/fastaid/.envExemplo em backend/.env.example:
DATABASE_URL=postgresql+psycopg://postgres:postgres@localhost:5432/fastaid
FRONTEND_BASE_URL=http://localhost:5173
CORS_ORIGINS=http://localhost:5173,http://localhost:4173
GEMINI_API_KEY=
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_SENDER_NUMBER=Exemplo em frontend/fastaid/.env.example:
VITE_API_BASE_URL=/api
VITE_BACKEND_TARGET=http://localhost:8000Cria uma base de dados chamada fastaid e ajusta o DATABASE_URL do backend se necessario.
cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cd src
uvicorn main:app --reload --host 127.0.0.1 --port 8000API disponivel em http://127.0.0.1:8000.
cd frontend/fastaid
npm ci
npm run devFrontend disponivel em http://localhost:5173.
Em desenvolvimento, o Vite faz proxy de /api para VITE_BACKEND_TARGET.
docker compose up --build -dServicos:
- frontend:
http://127.0.0.1:8080 - backend:
http://127.0.0.1:8000 - health via frontend/nginx:
http://127.0.0.1:8080/api/health
Para parar:
docker compose downPara remover tambem o volume da base de dados:
docker compose down -vComandos uteis:
python3 -m compileall backend/srccd frontend/fastaid
npm run lint
npm run builddocker compose ps
curl http://127.0.0.1:8080/api/health
curl "http://127.0.0.1:8080/api/incidents?limit=100"Os workflows estao em /.github/workflows:
- ci.yml: instala dependencias, compila o backend e faz build do frontend
- docker-publish.yml: faz build e publish das imagens para GHCR
- O backend cria as tabelas automaticamente no arranque.
- O endpoint
GET /incidentsaceita atelimit=100, o que alinha com o consumo atual do frontend. CORS_ORIGINSpode ser configurado como lista separada por virgulas, conforme os ficheiros.env.example.