matteoscrugli 00685c91fe Fix extra scrollable space on mobile with 100dvh
Use 100dvh (dynamic viewport height) instead of 100vh to fix
the extra scrollable space caused by mobile address bar height.
Keeps 100vh as fallback for unsupported browsers.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 21:54:28 +01:00
2025-12-05 09:53:16 +01:00

Service App

Modern web application for service management. Built with React, FastAPI, and SQLite.

Features

  • User management (admin)
  • Authentication (JWT) + 2FA (TOTP) + API keys
  • Active sessions (view/revoke)
  • Audit log + analytics (admin)
  • In-app notifications
  • Modern, responsive UI with theming
  • Fully containerized with Docker

Technology Stack

Frontend

  • React 19 + TypeScript
  • Vite (build tool)
  • React Router
  • Axios

Backend

  • FastAPI (Python 3.11+)
  • SQLAlchemy 2.0 (ORM)
  • SQLite (Database)
  • Alembic (migrations)
  • JWT authentication

Infrastructure

  • Docker + Docker Compose

Quick Start

Prerequisites

  • Docker and Docker Compose
  • Git

Installation

  1. Clone the repository:
git clone <repository-url>
cd <repository-folder>
  1. Copy environment variables:
cp .env.example .env
# Edit .env with your configuration
  1. Generate secret key:
openssl rand -base64 32
# Add to .env as SECRET_KEY
  1. Start all services:
docker-compose up -d
  1. Access the application:

Project Structure

.
├── docker-compose.yml
├── backend/              # FastAPI application
│   ├── app/
│   │   ├── api/         # API routes
│   │   ├── models/      # SQLAlchemy models
│   │   ├── schemas/     # Pydantic schemas
│   │   ├── services/    # Business logic
│   │   └── main.py      # Entry point
│   └── alembic/         # Database migrations
├── frontend/            # React application
│   └── src/
│       ├── components/  # React components
│       ├── pages/       # Page components
│       ├── api/         # API client
│       └── hooks/       # Custom hooks
└── scripts/             # Utility scripts

Configuration

Environment Variables

See .env.example for all available configuration options.

Key variables:

  • SECRET_KEY: JWT secret key
  • ALLOWED_HOSTS: CORS configuration

Persistent Data

  • SQLite database: sqlite:////config/config.db (bind-mounted via ./config:/config)
  • Uploads: /config/uploads by default (can be overridden with FILE_STORAGE_PATH)

Contributing

Feel free to fork and customize for your needs.

Description
Modern web application template
Readme 1.7 MiB
Languages
TypeScript 43.8%
Python 31.5%
CSS 24.1%
Dockerfile 0.3%