Skip to content

nothingnesses/memory-map

Repository files navigation

Memory Map

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.

Features

  • 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.

Screenshots

Map View

Map View

Gallery View

Gallery View

Admin View

Admin View

GraphQL API (GraphiQL)

GraphiQL View

Getting Started

1. Install dependencies

You’ll need:

2. Clone & enter project (you only need to do this step once)

git clone https://github.com/nothingnesses/memory-map.git
cd memory-map

3. Setup environment (you only need to do this step once)

cp .env.example .env
direnv allow

This 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.

4. Start database & storage

just servers

MinIO object storage becomes available at: http://localhost:9001/login

  • Username: minioadmin
  • Password: minioadmin

5. Start backend

In another shell, run:

just backend

Backend GraphQL playground: http://localhost:8000/

6. Start frontend

In another shell, run:

just frontend

Frontend app: http://localhost:3000/

Development Commands

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 prepare: Format code, run lints, and execute tests. Run this 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.

Tech Stack

Layer Technology
Frontend Leptos
UnoCSS
Backend Axum
GraphQL
Storage MinIO
Database PostgreSQL
Development Environment Nix package manager
nix-direnv
Task Runner Just

Project Structure

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 & types
├── .env.example     # Environment configuration template
├── justfile         # Development commands
├── Cargo.toml       # Rust workspace configuration
├── Cargo.lock       # Rust dependency lock file
└── README.md        # Project documentation

Contributing

We welcome contributions! Please ensure you run the preparation script before making a PR:

just prepare

This command will:

  • Format code (nix fmt, cargo fmt)
  • Run clippy lints
  • Generate documentation
  • Run tests

License

This project is licensed under the Blue Oak Model License 1.0.0.

About

View the places you've been and the memories you made.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •