Files
tankstopp-app/README.md
T
2025-07-07 01:44:12 +02:00

325 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TankStopp - Fuel Tracking Web Application
A simple and intuitive web application built with Go to track your fuel station stops and monitor fuel consumption.
## Features
- 📊 **Dashboard** - Overview of all fuel stops with statistics
- **Add Fuel Stops** - Record new fuel purchases with detailed information
- ✏️ **Edit/Delete** - Modify or remove existing fuel stop records
- 📈 **Statistics** - Track total spending, consumption, and average prices
- 🛣️ **Trip Length Tracking** - Record distance traveled for accurate consumption calculation
- 🔍 **Advanced Filtering** - Filter by date range, fuel type, and location
- 📊 **Monthly Reports** - Detailed monthly fuel consumption analytics
- 💾 **Bulk Operations** - Import/export multiple fuel stops efficiently
- 🔌 **REST API** - JSON endpoints for programmatic access
- 🗄️ **GORM Database** - Modern ORM with optimized queries and relationships
- 📱 **Responsive Design** - Works on desktop and mobile devices
- 📍 **Nearby Stations** - Find fuel stations near your location using OpenStreetMap
- ⚙️ **User Settings** - Manage profile, change password, and account preferences
## Getting Started
### Prerequisites
- Go 1.21 or higher
- SQLite3 (automatically managed by GORM)
### Installation
1. Clone or download the project:
```bash
git clone <repository-url>
cd tankstopp
```
2. Install dependencies:
```bash
go mod tidy
```
3. Run the application:
```bash
go run cmd/main.go
```
4. Open your browser and navigate to:
```
http://localhost:8080
```
### Building for Production
To build a standalone executable:
```bash
go build -o tankstopp cmd/main.go
./tankstopp
```
## Usage
### Adding a Fuel Stop
1. Click "Add New Stop" on the dashboard
2. Fill in the form with:
- Date of the fuel stop
- Station name and location
- Fuel type (Super E5, E10, Diesel, etc.)
- Amount of fuel in liters
- Price per liter
- Total price (calculated automatically)
- Odometer reading (optional)
- Notes (optional)
### Viewing Statistics
The dashboard shows:
- Total number of fuel stops
- Total liters purchased
- Total amount spent
- Average price per liter
- Average fuel consumption (if odometer readings are provided)
### Editing Fuel Stops
- Click the "Edit" button on any fuel stop card
- Modify the information and save
### Deleting Fuel Stops
- Click the "Delete" button on any fuel stop card
- Confirm the deletion
## API Endpoints
The application provides REST API endpoints for integration:
### GET /api/fuel-stops
Returns all fuel stops as JSON.
**Query Parameters:**
- `limit` - Number of results per page (default: 50)
- `offset` - Number of results to skip for pagination
- `fuel_type` - Filter by fuel type (e.g., "Diesel", "Super E5")
- `start_date` - Filter from date (YYYY-MM-DD format)
- `end_date` - Filter to date (YYYY-MM-DD format)
### POST /api/fuel-stops
Creates a new fuel stop from JSON data.
Example request body:
```json
{
"date": "2024-01-15",
"station_name": "Shell",
"location": "Hamburg",
"fuel_type": "Super E5",
"liters": 45.5,
"price_per_l": 1.599,
"total_price": 72.75,
"currency": "EUR",
"odometer": 125000,
"trip_length": 520.5,
"notes": "Highway stop"
}
```
### GET /api/stats
Returns fuel consumption statistics as JSON.
### GET /api/stats/monthly/{year}
Returns monthly statistics for the specified year.
### POST /api/fuel-stops/bulk
Creates multiple fuel stops in a single transaction.
## Database
The application uses **GORM** (Go Object-Relational Mapping) with SQLite3, which creates a `fuel_stops.db` file in the project directory. The database features include:
### Schema
- `users` table with authentication and user preferences
- `fuel_stops` table with all fuel stop information
- **Foreign key constraints** with cascade delete
- **Automatic indexing** on frequently queried fields
- **Unique constraints** on usernames and emails
### Features
- **Auto-migration** - Schema updates are handled automatically
- **Connection pooling** - Optimized database connections
- **Transaction support** - ACID compliance for data integrity
- **Relationship management** - Efficient joins and preloading
- **Type safety** - Compile-time validation of database operations
### Performance Optimizations
- Prepared statements for faster query execution
- Batch operations for bulk inserts
- Optimized indexes for common query patterns
- Connection pool tuning for concurrent access
## Project Structure
```
tankstopp/
├── cmd/
│ └── main.go # Application entry point
├── internal/
│ ├── auth/
│ │ └── session.go # Session management
│ ├── currency/
│ │ └── currency.go # Multi-currency support
│ ├── database/
│ │ └── db.go # GORM database operations
│ ├── handlers/
│ │ └── handlers.go # HTTP handlers & authentication
│ └── models/
│ └── fuelstop.go # GORM data models
├── templates/
│ ├── base.html # Base template
│ ├── index.html # Dashboard
│ ├── add.html # Add fuel stop form
│ └── edit.html # Edit fuel stop form
├── static/ # Static files (CSS, JS, images)
├── go.mod # Go module definition
└── README.md # This file
```
## Technologies Used
- **Backend**: Go with Gorilla Mux for routing
- **Database**: GORM ORM with SQLite3
- **Authentication**: Session-based with bcrypt password hashing
- **Currency**: Multi-currency support with 25+ currencies
- **Frontend**: HTML5, Tabler UI framework, Font Awesome
- **Templates**: Go HTML templates with custom functions
## Consumption Tracking Excellence
### Advanced Trip Analysis
TankStopp provides industry-leading fuel consumption tracking with precise trip-based calculations:
- **Trip Length Input**: Record exact distance traveled since last fillup
- **Automatic Consumption Calculation**: Real-time L/100km calculation per trip
- **Efficiency Ratings**: Categorized efficiency scoring (Excellent, Good, Average, High, Very High)
- **Driving Pattern Recognition**: Highway vs city vs mixed driving analysis
- **Fuel Type Optimization**: Compare efficiency across different fuel grades
- **Improvement Suggestions**: Identify potential efficiency gains
### Consumption Metrics
- **Individual Trip Consumption**: L/100km for each fuel stop
- **Overall Average Consumption**: Weighted average across all trips
- **Fuel Type Comparison**: Efficiency by fuel grade (E5, E10, Diesel, etc.)
- **Seasonal Analysis**: Monthly consumption trend tracking
- **Best/Worst Trip Identification**: Performance benchmarking
- **Cost Efficiency**: Cost per kilometer analysis
### Dual Calculation Methods
1. **Primary**: Trip length-based calculation (most accurate)
2. **Fallback**: Odometer difference calculation (backward compatibility)
3. **Hybrid**: Combines both methods for comprehensive analysis
## Features in Detail
### User Management
- Secure user registration and authentication
- Session-based login with automatic logout
- Multi-currency support with user preferences
- Password hashing with bcrypt
### Fuel Stop Tracking
- Record date, station, location, fuel type
- Track liters purchased and prices with precise decimal storage
- Multi-currency support with automatic formatting
- Calculate total costs automatically
- **Trip length tracking** for accurate fuel consumption calculation
- Optional odometer readings for additional tracking
- **Individual trip consumption display (L/100km)**
- **Real-time consumption analysis** with efficiency ratings
- **Per-trip fuel efficiency comparison** across different driving conditions
- **Fuel type consumption analysis** (highway vs city vs mixed driving)
- Bulk import/export capabilities
### Advanced Filtering & Search
- Filter by date range (start/end dates)
- Filter by fuel type (Diesel, Super E5, E10, etc.)
- Filter by location or station name
- Pagination support for large datasets
### Statistics Dashboard
- Visual overview of fuel consumption patterns
- Total spending and volume tracking across currencies
- Average price monitoring with trend analysis
- **Enhanced fuel consumption calculation** using trip length data
- **Per-trip consumption analysis** with efficiency ratings
- **Best/worst efficiency trip identification** with improvement suggestions
- **Fuel type consumption comparison** across different fuel grades
- **Driving pattern analysis** (highway vs city efficiency)
- **Monthly consumption trends** with seasonal analysis
- **Cost-per-kilometer tracking** for budget planning
- Monthly statistics and reports
- Last fillup information with trip details
### Data Management
- Create, read, update, delete fuel stops with ACID transactions
- Form validation and comprehensive error handling
- Responsive design optimized for mobile use
- Database relationship management
- Automatic schema migrations
### Nearby Fuel Stations
- **Location-based search** using browser geolocation
- **OpenStreetMap integration** for real-world fuel station data
- **Distance calculation** showing stations within 5km radius
- **One-click selection** to auto-fill station name and address
- **Smart sorting** by distance from your current location
- **Detailed information** including brand, operator, and full address
- **Privacy-focused** - location data is only used locally, not stored
### User Settings
- **Profile Management** - Update email address and base currency preference
- **Password Security** - Change password with current password verification
- **Account Statistics** - View total stops, liters, spending, and consumption
- **Currency Preferences** - Set default currency for new fuel stops
- **Account Information** - See member since date and account details
- **Data Management** - Permanently delete account and all associated data
- **Session Security** - Secure password updates with validation
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request
## Development
### Environment Variables
```bash
# Enable detailed database logging
export DB_DEBUG=true
# Set environment
export ENV=development
```
### Database Development
The application uses GORM for database operations. Key features:
- **Auto-migration**: Schema updates are automatic
- **Query logging**: Enable with `DB_DEBUG=true`
- **Connection pooling**: Optimized for performance
- **Transaction support**: Automatic rollback on errors
### Performance Monitoring
- Health check endpoint available
- Connection pool metrics
- Query performance logging in debug mode
## License
This project is open source and available under the MIT License.
## Support
For issues or questions, please create an issue in the project repository.