feat: initial project setup with implementation plan

- Add PLAN.md with 40-step checklist across 10 phases
- Add CLAUDE.md with project-specific instructions
- Set up nix flake with FastHTML/MonsterUI dependencies
- Create Python package skeleton (src/animaltrack)
- Vendor FastHTML and MonsterUI documentation
- Add Docker build configuration

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-27 17:37:16 +00:00
parent 852107794b
commit c0b939627b
61 changed files with 18076 additions and 0 deletions

66
docker.nix Normal file
View File

@@ -0,0 +1,66 @@
{ pkgs, pythonEnv, python }:
let
# Build animaltrack as a package
animaltrack = python.pkgs.buildPythonApplication {
pname = "animaltrack";
version = "0.1.0";
src = ./.;
format = "pyproject";
nativeBuildInputs = [ python.pkgs.setuptools ];
propagatedBuildInputs = [ pythonEnv ];
doCheck = false;
# Don't wrap, we'll handle PATH manually
dontWrapPythonPrograms = true;
};
in
pkgs.dockerTools.buildImage {
name = "gitea.v.paler.net/ppetru/animaltrack";
tag = "latest";
copyToRoot = pkgs.buildEnv {
name = "animaltrack-env";
paths = with pkgs; [
# System utilities
busybox
bash
sqlite
# Python environment with all packages
pythonEnv
# Animaltrack application
animaltrack
] ++ [
# Docker filesystem helpers
pkgs.dockerTools.usrBinEnv
pkgs.dockerTools.binSh
pkgs.dockerTools.fakeNss
pkgs.dockerTools.caCertificates
];
};
runAsRoot = ''
#!${pkgs.stdenv.shell}
mkdir -p -m 1777 /tmp
mkdir -p /var/lib/animaltrack
'';
config = {
Env = [
"DB_PATH=/var/lib/animaltrack/animaltrack.db"
"PATH=${pkgs.lib.makeBinPath [ pkgs.busybox pkgs.bash pkgs.sqlite pythonEnv ]}"
"PYTHONPATH=${pythonEnv}/${pythonEnv.sitePackages}"
"PYTHONUNBUFFERED=1"
];
ExposedPorts = {
"5000/tcp" = {};
};
Cmd = [ "sh" "-c" "animaltrack migrate && animaltrack serve" ];
WorkingDir = "/var/lib/animaltrack";
};
}