Watch
1
Fork
You've already forked reminisce
0
A self-hostable platform for people who forgets everything or wants to share everything they know. https://brain.vexcited.com
  • PHP 47.5%
  • Vue 32.5%
  • TypeScript 16.4%
  • Shell 2.3%
  • CSS 0.8%
  • Other 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Mikkel ALMONTE--RINGAUD 713feda995
Some checks failed
checks / ci (push) Failing after 2s
feat: customize slugs
2026-09-30 01:54:42 +02:00
.forgejo/workflows chore(ci): add tests on pr and commits 2026-09-23 14:37:25 +02:00
app feat: customize slugs 2026-09-30 01:54:42 +02:00
bootstrap feat: projects, notes and reminders 2026-09-26 13:05:47 +02:00
config feat: live updates over reverb websockets 2026-09-26 13:05:47 +02:00
database feat: nested slug urls for projects, notes and reminders 2026-09-30 01:54:42 +02:00
docker feat: docker and proxmox deployment 2026-09-26 13:05:48 +02:00
proxmox feat: docker and proxmox deployment 2026-09-26 13:05:48 +02:00
public feat: oidc login and user sessions 2026-09-23 14:38:27 +02:00
resources feat: customize slugs 2026-09-30 01:54:42 +02:00
routes feat: nested slug urls for projects, notes and reminders 2026-09-30 01:54:42 +02:00
storage chore: hello world 2026-09-23 14:37:06 +02:00
.dockerignore chore: hello world 2026-09-23 14:37:06 +02:00
.editorconfig chore: hello world 2026-09-23 14:37:06 +02:00
.env.example feat: live updates over reverb websockets 2026-09-26 13:05:47 +02:00
.gitattributes chore: hello world 2026-09-23 14:37:06 +02:00
.gitignore chore: hello world 2026-09-23 14:37:06 +02:00
.npmrc chore: hello world 2026-09-23 14:37:06 +02:00
artisan chore: hello world 2026-09-23 14:37:06 +02:00
bun.lock build: add editor, realtime and ui dependencies 2026-09-26 13:05:46 +02:00
compose.yml feat: docker and proxmox deployment 2026-09-26 13:05:48 +02:00
composer.json build: add editor, realtime and ui dependencies 2026-09-26 13:05:46 +02:00
composer.lock build: add editor, realtime and ui dependencies 2026-09-26 13:05:46 +02:00
CONTRIBUTING.md docs: contributing guide 2026-09-23 14:37:15 +02:00
Dockerfile feat: docker and proxmox deployment 2026-09-26 13:05:48 +02:00
package.json build: add editor, realtime and ui dependencies 2026-09-26 13:05:46 +02:00
phpstan.neon chore: hello world 2026-09-23 14:37:06 +02:00
pint.json chore: hello world 2026-09-23 14:37:06 +02:00
postcss.config.ts chore: hello world 2026-09-23 14:37:06 +02:00
README.md feat: projects, notes and reminders 2026-09-26 13:05:47 +02:00
rector.php chore: hello world 2026-09-23 14:37:06 +02:00
tsconfig.app.json chore: hello world 2026-09-23 14:37:06 +02:00
tsconfig.json chore: hello world 2026-09-23 14:37:06 +02:00
tsconfig.node.json chore: hello world 2026-09-23 14:37:06 +02:00
uno.config.ts feat: dark theme with geist fonts and grain 2026-09-26 13:05:46 +02:00
vite.config.ts feat: dark theme with geist fonts and grain 2026-09-26 13:05:46 +02:00

Table of contents

Who is this for?

Reminisce is for people who forgets everything you told yourself to remember two seconds ago.

Self-hosting

With Docker

All you need is Docker with Docker Compose.

git clone https://code.vexcited.com/vexcited/reminisce
cd reminisce
cp .env.example .env

Open .env and fill in:

  • APP_URL: the public URL of your instance, for example https://reminisce.example.com.
  • OAUTH_*: at least one login provider, see Login providers.

Then start it.

docker compose up -d

Reminisce is now running on port 8000. You can change the port with PORT=3000 in .env. Put it behind the reverse proxy of your choice (Caddy, Nginx, Traefik...) to serve it over HTTPS on your domain. Realtime collaboration runs in a second reverb container, reached through the same port on /app, so make sure your reverse proxy lets websockets through (Caddy and Traefik do it on their own, Nginx needs the Upgrade and Connection headers).

The first boot generates the app key, creates the SQLite database and runs the migrations. Everything is stored in the reminisce Docker volume, so back it up. The container reports its health through the /up route, you can also point your uptime monitor to it.

To update, pull the latest version and rebuild, migrations run automatically every time the container starts.

git pull
docker compose up -d --build

On Proxmox

Reminisce comes with a script based on the Proxmox VE Community Scripts. It creates an Alpine LXC container and installs Reminisce natively inside it.

In the shell of your Proxmox node, run:

bash -c "$(curl -fsSL https://code.vexcited.com/vexcited/reminisce/raw/branch/main/proxmox/ct/reminisce.sh)"

Once it's done, open the console of the container and edit the configuration.

nano /opt/reminisce/.env

Fill in APP_URL and at least one login provider, see Login providers. The configuration is cached for performance, so apply your changes with:

php /opt/reminisce/artisan optimize

Reminisce is now reachable on port 80 of the container. Realtime collaboration runs as the reminisce-reverb service, Nginx forwards the websockets on /app to it.

To update, run update in the console of the container. It pulls the latest version, rebuilds it and runs the migrations.

Login providers

Reminisce has no passwords: users log in with any OAuth2 or OpenID Connect provider (Pocket ID, Authentik, Keycloak, GitHub, GitLab...). You can add as many providers as you want.

List them in OAUTH_PROVIDERS, separated by commas, then configure each one with its key in uppercase.

OAUTH_PROVIDERS=pocketid,github

OAUTH_POCKETID_NAME="Pocket ID"
OAUTH_POCKETID_CLIENT_ID=...
OAUTH_POCKETID_CLIENT_SECRET=...
OAUTH_POCKETID_AUTHORIZE_URL=https://id.example.com/authorize
OAUTH_POCKETID_TOKEN_URL=https://id.example.com/api/oidc/token
OAUTH_POCKETID_USERINFO_URL=https://id.example.com/api/oidc/userinfo
OAUTH_POCKETID_PKCE=true

OAUTH_GITHUB_NAME=GitHub
OAUTH_GITHUB_CLIENT_ID=...
OAUTH_GITHUB_CLIENT_SECRET=...
OAUTH_GITHUB_AUTHORIZE_URL=https://github.com/login/oauth/authorize
OAUTH_GITHUB_TOKEN_URL=https://github.com/login/oauth/access_token
OAUTH_GITHUB_USERINFO_URL=https://api.github.com/user
OAUTH_GITHUB_SCOPES="read:user user:email"
Variable Required Default
OAUTH_{KEY}_NAME no the key
OAUTH_{KEY}_CLIENT_ID yes
OAUTH_{KEY}_CLIENT_SECRET yes
OAUTH_{KEY}_AUTHORIZE_URL yes
OAUTH_{KEY}_TOKEN_URL yes
OAUTH_{KEY}_USERINFO_URL yes
OAUTH_{KEY}_SCOPES no openid profile email
OAUTH_{KEY}_PKCE no false

When creating the OAuth application on the provider side, use {APP_URL}/user/login/{key}/callback as the callback URL, for example https://reminisce.example.com/user/login/github/callback.

After changing .env, apply it with docker compose up -d on Docker, or php /opt/reminisce/artisan optimize on Proxmox.

Roadmap

  • Scaffold Laravel with Vue through Inertia
  • Projects, notes and reminders with public or private visibility
  • Graph

This section should be entirely replaced by Reminisce, once good enough!

Vocabulary

User

Your instance have users, they should be authenticated. The platform is not gated by authentication though, people can make public projects, notes or even reminders!

Project

Groups stuff in a single place. In a project, you can have notes, reminders, users and even more projects!

Note

A markdown reader (and editor when going into this mode). It should be able to be private (default value) or public.

Reminder

Something you can create inside a note, a project or even globally! It can also be private (default value) or public.

A reminder has a deadline, a title and an optional markdown content or even attachments if needs more explanation.

Graph

A graph of all the notes/reminders linked together with also the ones from external users, if they did linked yours.