Memory Map is a location-aware media archive that allows users to upload photos, videos, and audio files.
The list of supported file types is defined in the allowed files list.
Time and location metadata are manually provided by users and are used to visualise uploaded media on an interactive world map.
Users can browse the map, click markers and explore media galleries tied to real-world locations - creating a digital memory atlas.
- Upload media files (images, videos and audio files).
- Manual location & timestamp tagging.
- Interactive world map with clickable memory pins.
- Gallery view for each map location.
You'll need:
git clone https://github.com/nothingnesses/memory-map.git
cd memory-mapcp .env.example .env
direnv allowThis installs all dependencies and auto-loads the development shell whenever you enter the directory.
You can optionally configure the build mode and other settings by editing .env:
BUILD_MODE="debug"(default): Faster compilation, includes debug info.BUILD_MODE="release": Optimised build, smaller binaries, slower compilation.- Database, SMTP, and S3 storage configurations.
just serversMinIO object storage becomes available at: http://localhost:9001/login
- Username:
minioadmin - Password:
minioadmin
In another shell, run:
just backendBackend GraphQL playground: http://localhost:8000/
In another shell, run:
just frontendFrontend app: http://localhost:3000/
The project uses Just as a task runner.
just servers: Start PostgreSQL and MinIO via Nix.just backend: Start the Axum backend with hot-reloading (via Bacon).just frontend: Start the Leptos frontend (via Trunk).just fmt: Format Rust, Nix, Markdown, YAML, and TOML files.just check: Runcargo checkfor the workspace.just clippy: Run Clippy with warnings treated as errors.just deny: Check Rust dependencies withcargo-deny.just doc: Build documentation with warnings treated as errors and run ASCII/link checks.just test: Run the workspace test suite with cached output.just frontend-build: Build the frontend with Trunk.just verify: Run the full verification suite before submitting a PR.just regenerate-schema: Introspect the backend and update the frontend GraphQL schema.just scan-hardcoded: Scan the codebase for hardcoded secrets or values.
| Layer | Technology |
|---|---|
| Frontend | Leptos |
| UnoCSS | |
| Backend | Axum |
| GraphQL | |
| Storage | MinIO |
| Database | PostgreSQL |
| Development Environment | Nix package manager |
| nix-direnv | |
| Task Runner | Just |
memory-map/
|-- .direnv/ # Direnv environment cache
|-- backend/ # Axum and GraphQL backend
|-- data/ # Database and storage volumes
|-- devenv/ # Nix development environment
|-- frontend/ # Leptos and UnoCSS frontend
|-- shared/ # Shared utilities and types
|-- .env.example # Environment configuration template
|-- justfile # Development commands
|-- Cargo.toml # Rust workspace configuration
|-- Cargo.lock # Rust dependency lock file
`-- README.md # Project documentation
We welcome contributions! Please ensure you run the verification suite before making a PR:
just verifyThis command will:
- Format code and config
- Run workspace checks and Clippy
- Check dependency licenses and advisories
- Generate documentation
- Run tests
- Build the frontend
This project is licensed under the Blue Oak Model License 1.0.0.



