Smart Notes este o aplicație full-stack de tip CRUD pentru administrarea notițelor. Backend-ul este construit cu Python, FastAPI, SQLAlchemy 2.x, Alembic și PostgreSQL, iar frontend-ul folosește React, Vite, React Router, Axios și Ant Design.
Aplicația permite autentificare cu JWT, listarea, crearea, vizualizarea, editarea, ștergerea, căutarea, pin/unpin și arhivarea notițelor. Fiecare utilizator vede doar notițele proprii.
- Frontend (Render): https://frontend-fba3.onrender.com
- Swagger API Docs: https://twa-pi1n.onrender.com/docs
- Backend: Python 3.12, FastAPI, SQLAlchemy 2.x, Alembic, Pydantic Settings, Uvicorn
- Bază de date: PostgreSQL
- Frontend: React, Vite, Ant Design, React Router, Axios
- Containerizare: Docker pentru backend și Docker Compose pentru backend + PostgreSQL
- Deploy: GitHub + Render Web Service + Render PostgreSQL + Render Static Site
Frontend-ul trimite cereri HTTP către API-ul FastAPI prin Axios. API-ul validează datele cu Pydantic, execută operații CRUD prin SQLAlchemy și persistă datele în PostgreSQL. Alembic gestionează schema bazei de date prin migrații.
project-root/
backend/
app/
core/config.py
routes/notes.py
crud.py
database.py
dependencies.py
main.py
models.py
schemas.py
alembic/
env.py
script.py.mako
versions/202604290001_create_notes.py
alembic.ini
Dockerfile
requirements.txt
.env.example
frontend/
src/
components/
pages/
services/api.js
styles/global.css
App.jsx
main.jsx
index.html
package.json
vite.config.js
.env.example
docker-compose.yml
render.yaml
report.md
README.md
Backend (backend/.env):
DATABASE_URL=postgresql+psycopg://smart_notes:smart_notes_password@localhost:5432/smart_notes
FRONTEND_URL=http://localhost:5173
CORS_ORIGINS=http://localhost:5173
ENVIRONMENT=development
SECRET_KEY=change-this-in-production
ACCESS_TOKEN_EXPIRE_MINUTES=1440
JWT_ALGORITHM=HS256Frontend (frontend/.env):
VITE_API_URL=http://localhost:8000/apiCopiază fișierele exemplu:
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.envAi nevoie de PostgreSQL instalat local și o bază de date creată:
createdb smart_notes
createuser smart_notes --pwpromptDacă userul există deja, setează parola și permisiunile conform instalării tale PostgreSQL.
Backend:
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
alembic upgrade head
uvicorn app.main:app --reloadAPI-ul va fi disponibil la http://localhost:8000, iar documentația Swagger la http://localhost:8000/docs.
Frontend:
cd frontend
npm install
cp .env.example .env
npm run devFrontend-ul va rula la http://localhost:5173.
Docker Compose pornește PostgreSQL și backend-ul:
docker compose up --buildBackend-ul va rula la http://localhost:8000. Frontend-ul se rulează separat:
cd frontend
npm install
npm run devPentru oprire:
docker compose downPentru ștergerea volumului PostgreSQL local:
docker compose down -vAplică migrațiile existente:
cd backend
alembic upgrade headGenerează o migrație nouă după modificarea modelelor:
cd backend
alembic revision --autogenerate -m "describe change"
alembic upgrade headGET /healthPOST /api/auth/registerPOST /api/auth/loginGET /api/auth/meGET /api/notesGET /api/notes/{id}POST /api/notesPUT /api/notes/{id}PATCH /api/notes/{id}DELETE /api/notes/{id}
Endpoint-ul GET /api/notes acceptă parametrii opționali search, tag și include_archived.
- Intră în Render Dashboard.
- Alege
New->PostgreSQL. - Setează numele, de exemplu
smart-notes-db. - Alege planul dorit.
- După creare, copiază
Internal Database URL.
- Publică proiectul pe GitHub.
- În Render, alege
New->Web Service. - Conectează repository-ul GitHub.
- Setează
Root Directorylabackend. - Alege
Dockerca runtime. - Health check path:
/health.
În Render Web Service adaugă:
DATABASE_URL=<Internal Database URL din Render PostgreSQL>
ENVIRONMENT=production
SECRET_KEY=<generează o valoare lungă și secretă>
ACCESS_TOKEN_EXPIRE_MINUTES=1440
FRONTEND_URL=https://smart-notes-frontend.onrender.com
CORS_ORIGINS=https://smart-notes-frontend.onrender.comRender poate oferi URL de forma postgres://...; backend-ul îl normalizează automat pentru driverul psycopg.
Dockerfile-ul rulează automat alembic upgrade head înainte de pornirea serverului. Alternativ, poți rula manual din Render Shell:
alembic upgrade head- În Render, alege
New->Static Site. - Conectează același repository GitHub.
- Setează
Root Directorylafrontend. - Build command:
npm install && npm run build- Publish directory:
distÎn environment variables pentru Static Site:
VITE_API_URL=https://smart-notes-backend.onrender.com/apiDupă modificarea acestei valori trebuie redeployat frontend-ul, deoarece variabilele VITE_ sunt incluse la build.
- Deschide
https://smart-notes-backend.onrender.com/health. - Deschide
https://smart-notes-backend.onrender.com/docs. - Deschide URL-ul frontend-ului.
- Creează o notiță, editeaz-o, arhiveaz-o și șterge-o.
Fișierul render.yaml poate fi folosit pentru un deploy Blueprint. După creare, actualizează URL-urile FRONTEND_URL, CORS_ORIGINS și VITE_API_URL dacă Render generează nume diferite pentru servicii.
- Eroare CORS: verifică dacă
FRONTEND_URLșiCORS_ORIGINSconțin URL-ul frontend-ului. - Backend-ul nu se conectează la baza de date: verifică
DATABASE_URLși folosește URL-ul intern Render pentru backend. - Frontend-ul apelează localhost în producție: setează
VITE_API_URLîn Render și redeployează Static Site-ul. - Tabelele lipsesc: rulează
alembic upgrade head. - Port greșit pe Render: Dockerfile-ul folosește
${PORT:-8000}, deci acceptă portul injectat de Render.
Inițializează și publică repository-ul:
git add .
git commit -m "Add Smart Notes full-stack app"
git branch -M main
git remote add origin https://github.com/<user>/<repo>.git
git push -u origin main