{"id":51324053,"url":"https://github.com/alfiosalanitri/flask-rack-list","last_synced_at":"2026-07-01T16:30:48.001Z","repository":{"id":365495515,"uuid":"1272253950","full_name":"alfiosalanitri/flask-rack-list","owner":"alfiosalanitri","description":"A lightweight Flask + Tailwind app to catalogue your servers and see at a glance what each one does.","archived":false,"fork":false,"pushed_at":"2026-06-17T15:04:17.000Z","size":25,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-17T16:58:11.067Z","etag":null,"topics":["flask","python","server","sysadmin"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alfiosalanitri.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-17T12:38:11.000Z","updated_at":"2026-06-17T15:04:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/alfiosalanitri/flask-rack-list","commit_stats":null,"previous_names":["alfiosalanitri/flask-rack-list"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/alfiosalanitri/flask-rack-list","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfiosalanitri%2Fflask-rack-list","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfiosalanitri%2Fflask-rack-list/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfiosalanitri%2Fflask-rack-list/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfiosalanitri%2Fflask-rack-list/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alfiosalanitri","download_url":"https://codeload.github.com/alfiosalanitri/flask-rack-list/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfiosalanitri%2Fflask-rack-list/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35015052,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flask","python","server","sysadmin"],"created_at":"2026-07-01T16:30:47.360Z","updated_at":"2026-07-01T16:30:47.996Z","avatar_url":"https://github.com/alfiosalanitri.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rack·list — Server Inventory\n\nSelf-hosted server inventory built with Flask and Tailwind. Track name, IP, OS, client, role, provider, and more. Includes full-text search, status filters (online/maintenance/offline/decommissioned), an admin panel, and dark/light theme. Runs as a Docker container with persistent SQLite storage.\n\n**Fields per server:** name, IP address, operating system, client, role, location, provider, SSH port, description, and notes.\n\n**Features:**\n\n- Public list with full-text search and status filters (online / maintenance / offline / decommissioned)\n- Per-status counters at the top of the page\n- Expandable description and notes directly on the card — no page navigation needed\n- Admin area protected by login to add, edit and delete servers\n- Dark / light theme toggle (preference saved in the browser)\n- Persistent SQLite database via Docker volume\n\n---\n\n## Screenshots\n![Dark-themed server inventory dashboard displaying three server cards: ant (offline, Debian 10, Acme client), crocodile (maintenance, Ubuntu 24 LTS, Dr. X client), and drake-unicorn (online, Debian 13, Drake Ltd client). Top navigation shows total of 3 servers with status breakdown: 1 online, 1 maintenance, 1 offline, 0 decommissioned. Search bar available for filtering by name, IP, client, OS, or role. Each card shows server details including IP address, client, operating system, role, location, provider, and SSH port. Admin controls and theme toggle visible in header. Professional network management interface with cyan accent colors on dark background.](screenshots/Screenshot-1.png)\n\n\u003cimg src=\"screenshots/Screenshot-2.png\" width=\"32%\" alt=\"Screenshot 2\" /\u003e \u003cimg src=\"screenshots/Screenshot-3.png\" width=\"32%\" alt=\"Screenshot 3\" /\u003e \u003cimg src=\"screenshots/Screenshot-4.png\" width=\"32%\" alt=\"Screenshot 4\" /\u003e\n\n---\n\n## Quick start — pre-built image\n\nEvery push to `main` publishes a Docker image to GitHub Container Registry.\n\n```bash\n# Pull the latest image\ndocker pull ghcr.io/alfiosalanitri/flask-rack-list:latest\n\n# Run it\ndocker run -d \\\n  -p 7002:5000 \\\n  -e ADMIN_USERNAME=admin \\\n  -e ADMIN_PASSWORD=changeme \\\n  -e SECRET_KEY=your-long-random-key \\\n  -v racklist-data:/data \\\n  ghcr.io/alfiosalanitri/flask-rack-list:latest\n\n# Run with Docker compose\nservices:\n  app:\n    image: ghcr.io/alfiosalanitri/flask-rack-list:latest\n    ports:\n      - \"7002:5000\"\n    env_file:\n      - .env\n    volumes:\n      # SQLite database persisted across container restarts\n      - racklist-data:/data\n    restart: always\n\nvolumes:\n  racklist-data:\n\n```\n\nThen open **http://localhost:7002**\n\n---\n\n## Build from source with Docker Compose\n\n```bash\n# 1. Copy and edit the environment file\ncp .env.example .env\n# Edit .env — set ADMIN_PASSWORD and SECRET_KEY\n\n# 2. Start\ndocker compose up --build\n```\n\nOpen **http://localhost:7002**\n\nTo stop: `Ctrl+C` or `docker compose down`.\n\n### Data persistence\n\nThe database is stored in the Docker volume `racklist-data` and survives container restarts.\nTo wipe everything:\n\n```bash\ndocker compose down -v\n```\n\n---\n\n## Development (no Docker)\n\n```bash\npip install -r requirements.txt\nexport ADMIN_USERNAME=admin ADMIN_PASSWORD=admin SECRET_KEY=dev\npython app.py\n```\n\nOpen **http://localhost:5000**\n\nSet `FLASK_DEBUG=1` to enable the Werkzeug debugger (development only).\n\n---\n\n## Environment variables\n\n| Variable | Default | Description |\n|---|---|---|\n| `ADMIN_USERNAME` | `admin` | Admin login username |\n| `ADMIN_PASSWORD` | `admin` | Admin login password |\n| `SECRET_KEY` | *(insecure default)* | Flask session signing key — **change before production** |\n| `DATA_DIR` | `./data` | Directory where `inventory.db` is stored |\n| `FLASK_DEBUG` | `0` | Set to `1` to enable debug mode (development only) |\n\n---\n\n## CI/CD — Docker image workflow\n\nThe workflow at [`.github/workflows/docker-publish.yml`](.github/workflows/docker-publish.yml) runs on every push to `main`:\n\n1. Checks out the code\n2. Logs in to GitHub Container Registry with `GITHUB_TOKEN` (no extra secrets needed)\n3. Builds and pushes two tags: `latest` and `sha-\u003cshort-commit\u003e`\n\nThe image is public at `ghcr.io/\u003cowner\u003e/\u003crepo\u003e:latest`.\n\n---\n\n## Notes\n\n- Tailwind CSS and fonts are loaded from CDN — a browser internet connection is required.\n- To expose beyond localhost, put the app behind a reverse proxy (nginx, Caddy…) with HTTPS.\n- The host port is configurable in `docker-compose.yml` (default `7002`).\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n\n**Maintainer:** Alfio Salanitri — [www.alfiosalanitri.it](https://www.alfiosalanitri.it)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falfiosalanitri%2Fflask-rack-list","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falfiosalanitri%2Fflask-rack-list","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falfiosalanitri%2Fflask-rack-list/lists"}