A CLI based (for now...) daily journal + expense tracker built while learning Production Grade Python, FastAPI, React and other cool backend engineering topics... Aura started off as a simple command line application and is gradually evolving into a personal production project while I learn backend engineering concepts one by one.
-
Daily Aura Commit
- Date
- Mood
- Energy Level
- Today's Win
- Song of the Day
-
Expense Tracker
- Add multiple expenses
- Categorize expenses
- Append expenses to today's Aura entry
-
History
- View all previous Aura entries
- Chronological ordering
-
Stats
- Total entries
- Average energy
- Favourite mood
- Favourite song
- Total expenses
- Highest spending category
-
Search feature
- Search by date (
YYYY-MM-DD) - Search today's entry
- Search yesterday's entry
- Search by mood
- Search by today's win
- Search by song
- Search by expense category
- Search by date (
-
Editing Entries Feature
- Update today's mood
- Update energy level
- Update today's win
- Update today's song
- REST API Endpoints
- Request Validation using Pydantic
- JSON Responses
- HTTP Exception Handling
- API Routing using APIRouter
- CORS Configuration
- Swagger/OpenAPI Documentation
- Dependency Injection using existing Service Layer
- Beautiful Glassmorphism UI
- Daily Aura Commit Form
- Connected to FastAPI using Axios
- Component based architecture
- Responsive layout (more improvements coming...)
- Environment based Configuration
- JSON based Storage
- Logging Support
- Automated Unit Testing using Pytest
Aura
│
├── app
│ ├── api
│ │ ├── entries.py
│ │ ├── expenses.py
│ │ └── stats.py
│ │
│ ├── cli
│ ├── core
│ ├── models
│ ├── services
│ └── storage
│
├── frontend
│ ├── src
│ │ ├── components
│ │ ├── styles
│ │ ├── App.jsx
│ │ └── main.jsx
│ │
│ ├── package.json
│ └── vite.config.js
│
├── tests
├── data
├── logs
│
├── README.md
├── requirements.txt
├── .env
└── .gitignore
- Python 3.12+
- FastAPI
- Uvicorn
- Typer
- Pydantic v2
- Pydantic Settings
- JSON
- Python Logging
- React
- Vite
- Axios
- HTML
- CSS
- Pytest
- Git
- GitHub
(More coming soon...Docker, Redis, Celery, PostgreSQL)
Clone the repo
git clone git@github.com:Adi7coder/AURA-Cli.gitFor users without SSH
git clone https://github.com/Adi7coder/AURA-Cli.gitNavigate into the project
cd AURA-CliCreate a virtual environment
python -m venv .venvActivate it
.venv\Scripts\activatesource .venv/bin/activateInstall Python dependencies
pip install -r requirements.txtpython -m app.cli.main commitpython -m uvicorn app.main:app --reloadSwagger Documentation
http://127.0.0.1:8000/docs
Redoc
http://127.0.0.1:8000/redoc
Move into the frontend folder
cd frontendInstall dependencies
npm installStart the development server
npm run devFrontend runs on
http://localhost:5173
(Currently the frontend supports Aura Commit...more features are being added as I learn.)
Create a .env file in the project root.
APP_NAME=Aura
DATA_PATH=data/aura.json
LOG_PATH=logs/aura.logCreate today's Aura
python -m app.cli.main commitAdd an expense
python -m app.cli.main expenseView history
python -m app.cli.main historyView statistics
python -m app.cli.main statsSearch Aura entries
python -m app.cli.main search <query>Example runs
python -m app.cli.main search today
python -m app.cli.main search yesterday
python -m app.cli.main search 2026-07-28
python -m app.cli.main search bella
python -m app.cli.main search foodEdit today's Aura entry
python -m app.cli.main editLaunch the backend
python -m uvicorn app.main:app --reloadSwagger UI
http://127.0.0.1:8000/docs
Current Endpoints
GET /entries/
POST /entries/
PUT /entries/{date}
DELETE /entries/{date}
(More endpoints coming soon...)
Run the frontend
cd frontend
npm install
npm run devFrontend
http://localhost:5173
Aura currently stores everything inside
data/aura.json
No database yet.
(PostgreSQL will eventually replace this once that part of the roadmap begins.)
- Layered Architecture
- Separation of Concerns
- Type Hints
- Pydantic Models
- Environment Variables
- JSON Serialization
- Logging
- Dependency Injection
- Service Layer Design
- CLI Development using Typer
- Error Handling
- Search Algorithms
- Dynamic Attribute Updates (
setattr) - Unit Testing with Pytest
- FastAPI Project Structure
- APIRouter
- Request Validation
- REST API Design
- HTTP Methods
- Path Parameters
- JSON Responses
- Exception Handling
- CORS
- Swagger/OpenAPI Documentation
- React Fundamentals
- Component Based Architecture
- Props
- useState
- Axios
- React + FastAPI Integration
- Modern CSS
- Glassmorphism UI
Aura currently includes automated unit tests using Pytest. Covered functionality
- Add Aura Entry
- Prevent Duplicate Entries
- Search Entries
- Update Existing Entries
- Statistics Calculation
Run all tests
python -m pytest(Currently 5 tests...more will be added as new backend features are built.)
- Daily Aura Commit
- Expense Tracking
- History
- Statistics
- Search Entries
- Edit Entries
- Environment-based Configuration
- JSON Storage
- Logging
- Unit Testing with Pytest
- FastAPI Backend
- REST API Endpoints
- Interactive API Documentation (Swagger/OpenAPI)
- React Frontend Setup
- React ↔ FastAPI Integration
- Complete all CRUD Endpoints
- History UI
- Statistics UI
- Expense Management UI
- Docker Containerization
- Redis Integration
- Celery Background Tasks
- Async Processing
- PostgreSQL Database
- Authentication
- Deployment
Ensure the virtual environment is activated.
.venv\Scripts\activate
pip install -r requirements.txtUsually caused by incorrect package imports or missing __init__.py.
Verify project structure and imports.
If data/aura.json becomes empty or corrupted, initialize it with
[]Ensure the .env file exists in the project root.
APP_NAME=Aura
DATA_PATH=data/aura.json
LOG_PATH=logs/aura.logRun tests from the project root.
python -m pytestIf imports fail verify
app/is a package- Virtual environment is activated
Usually happens when React tries talking to FastAPI.
Ensure FastAPI has
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"]
)Make sure the backend is actually running.
python -m uvicorn app.main:app --reloadUsually means the API endpoint doesn't exist or the frontend is pointing to the wrong URL. Double check
/entries/
/stats/
/expenses/
GitHub no longer supports password authentication.
Use SSH authentication instead.
Your local and remote branches have diverged.
Synchronize them before pushing.
git pull --rebase origin main
git push origin mainOccurs when tests use dependency injection but JSONStorage hasn't been updated.
Ensure the constructor accepts an optional storage path.
Refactor StatsService to support dependency injection.
def __init__(
self,
entry_service=None
):
self.entry_service = entry_service or EntryService()- Production Grade Python Fundamentals
- Layered Project Architecture
- CLI Development using Typer
- Configuration Management
- JSON Storage
- Logging
- Search
- Editing
- Automated Testing (Pytest)
- FastAPI
- REST API Design
- Swagger Documentation
- React Setup
- Axios Integration
- React ↔ FastAPI Communication
- Modern UI (still improving...)
Currently working on
- Completing the React frontend
- Docker
- Redis
- Celery
- Backend Engineering
- Layered Architecture (CLI → Services → Storage → Models)
- FastAPI Backend using APIRouter
- React Frontend
- REST API Design
- Swagger/OpenAPI Documentation
- Dependency Injection for improved testability
- JSON Persistence Layer
- Environment Based Configuration
- Logging
- 5 Automated Unit Tests
- Built while learning backend engineering concepts instead of just reading about them.
(Current goal: Slowly keep upgrading Aura while progressing through the backend roadmap.)
Aditya S Hegde
If you've read till here... Thanks :)
Now excuse me while I go break something else and spend the next 3 hours figuring out why it broke....