Your private space for shared memories β for couples, families, and friends.
SharedMoments is a self-hosted web app that lets you capture and relive your most important moments together. Upload photos & videos, track milestones, set countdowns, and get notified on special days β all in a beautiful, modern interface.
The first load may take 20β30 seconds to start up.
- Photo & Video Feed β Upload and browse your shared moments on a personalized home page
- Gallery β Create albums for trips, events, and more
- Timeline β Chronicle significant moments (first kiss, moving in together, engagement, ...)
- Countdown β Set a timer for upcoming events with live countdown card
- Banner β Display your relationship duration in years, months, weeks, and days β exportable as an image
- Custom Lists β Movie list, bucket list, or create your own lists with custom icons and paths
- Soundtrack β Upload and play your song directly from the banner
SharedMoments supports three editions, selectable during setup:
| Edition | Description |
|---|---|
| Couples | For partners β relationship status, anniversary, engagement & wedding dates |
| Family | For families β family name, founding date |
| Friends | For friend groups β group name, founding date |
You can switch editions at any time without losing data.
- Let AI help you write beautiful descriptions for your memories
- Supports OpenAI, Anthropic (Claude), and Ollama (local/self-hosted)
- Customizable via environment variable
- Push Notifications β Delivered directly to your browser or phone (works automatically, no setup needed)
- E-Mail β Receive notifications via email
- Telegram β Get notified via Telegram bot
- Each user can choose their preferred notification channels in settings
- Annual β Birthdays, anniversaries, wedding days (auto-synced from your data)
- One-time β Custom reminders for specific dates
- Milestones β Automatic reminders at 100, 365, 1000 days and more (up to 30 years)
- Countdowns β Get notified when a countdown reaches zero
- Mute individual reminders per user
- Choose how many days in advance you want to be notified
- Secure login with email & password
- Passkey β Log in without a password using a security key
- Password Reset β Reset via email link on the login page (requires SMTP) or via CLI:
python manage.py set-password <email> - Manage users, roles, and permissions in the admin panel
- Share individual items via link
- Optional password protection
- Optional expiration date
- View counter (can be disabled)
- Install as Progressive Web App β Add SharedMoments to your home screen on any device, with offline support
- Dark Mode β Per user setting
- Accent Color β Customize the look & feel per user
- Multilingual β German & English included, add more languages in the built-in [translation manager (See Wiki for more Details)
- Video Thumbnails β Automatically generated
- Data Export & Import β Full backup and restore of all data and media as ZIP
- Create a
docker-compose.yml:
services:
sharedmoments:
image: techkev/sharedmoments
container_name: sharedmoments
restart: unless-stopped
ports:
- "5001:5001"
volumes:
- sm-database:/app/app/database
- sm-uploads:/app/app/uploads
- /etc/localtime:/etc/localtime:ro
environment:
- SECRET_KEY=CHANGE-ME
volumes:
sm-database:
sm-uploads:- Generate a secure secret key:
python3 -c "import secrets; print(secrets.token_hex(32))"- Start the container:
docker compose up -d- Open
http://your-ip:5001and complete the setup wizard.
See the full
docker-compose.ymlin this repo for all available options (AI, notifications, migration, etc.)
Supported on Debian/Ubuntu, Fedora/Rocky, CentOS:
curl -fsSL https://raw.githubusercontent.com/tech-kev/SharedMoments/main/install.sh | sudo bashFor Docker, pull and restart. For native installations, use the built-in update script:
sudo bash /opt/sharedmoments/update.shThe script backs up your data, pulls the latest code, updates dependencies, and restarts the service. See the wiki for details.
All configuration is done via environment variables. See the Configuration wiki page for all available options including AI providers, notifications, passkeys, demo mode, and more.
Coming from SharedMoments v1? v2 includes a built-in migration tool that transfers your data from MySQL to SQLite. See the Migration Guide for step-by-step instructions.
Currently available languages:
- π©πͺ German
- π¬π§ English
New languages can be added directly in the built-in translation manager (accessible from the sidebar for users with the right permissions).
See the wiki for details.
| Layer | Technology |
|---|---|
| Backend | Python 3.12, Flask, SQLAlchemy, SQLite |
| Frontend | Jinja2, JavaScript, BeerCSS (Material Design 3) |
| AI | OpenAI, Anthropic, Ollama |
| Media | ffmpeg, Pillow |
| Deployment | Docker (Gunicorn) or native (systemd) |
Have an idea? Please submit feature requests via the issue section.
Found a bug? Please open an issue and describe the problem.
I was looking for a website where my girlfriend and I could capture our moments together. When I couldn't find anything that met our needs, I started building my own. What began as a small side project grew into something much bigger β and eventually I decided to rebuild it from scratch and make it available to everyone.
SharedMoments v2 is a complete rewrite β born from everything I learned while building the first version. The more I worked on it, the stronger the desire grew to rebuild it from the ground up: cleaner under the hood, better architecture, and packed with new features like AI-assisted writing, passkey login, push notifications, and a full role & permission system. I also wanted to go beyond just couples, so v2 now comes in three editions β Couples, Family, and Friends β to fit different kinds of relationships.
If you like this project, consider supporting it:
SharedMoments is licensed under the GNU Affero General Public License v3.0.


