A social journaling platform with the warmth of the early web, rebuilt for the open social web. No algorithm, no ads.
SocialTypeScript · ElixirGitHub @stantondevOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Inkwell — A federated social journaling platform. LiveJournal meets MySpace, reimagined for 2026 with ActivityPub federation. No algorithms, no ads, user-owned spaces. Self-hostable.
Taken from the repository README
Loading the full README.
Read the full README ↗A federated social journaling platform — LiveJournal meets MySpace, reimagined for 2026 with ActivityPub federation. No algorithms, no ads, user-owned spaces.
Live instance: inkwell.social
@[email protected]Article objects (FEP-b2b8)/roadmapink_-prefixed API keysgen_smtp or Resend API (transactional + newsletters)inkwell/
apps/
api/ # Elixir/Phoenix backend (mix project)
web/ # Next.js frontend (npm workspace member)
services/
federation/ # Unused — federation is native in Phoenix
packages/
types/ # Shared TypeScript types (npm workspace member)
npm workspaces monorepo. Lock file lives at root, not in individual apps.
brew install elixir on macOS)# 1. Start Docker services (Postgres + Meilisearch)
docker compose up -d
# 2. Install JS dependencies
npm install
# 3. Install Elixir deps, create DB, run migrations
cd apps/api && mix setup
# 4. Start Phoenix API (Terminal 1)
mix phx.server
# Wait for: Running InkwellWeb.Endpoint at 0.0.0.0:4000
# 5. Start Next.js frontend (Terminal 2, from project root)
npm run dev:web
# Wait for: Ready in ...ms
| Service | URL |
|---|---|
| Frontend | http://localhost:3000 |
| Phoenix API | http://localhost:4000 |
| API Health Check | http://localhost:4000/health |
| Meilisearch | http://localhost:7700 |
No email service is needed for local development. The API runs in "dev mode" — after entering any email on the login/signup page, a clickable magic link appears on screen instead of being emailed.
mix compile FailsOn first compile with Elixir 1.19, you may hit a one-time ordering issue:
mix deps.compile oban --force
mix compile
Inkwell runs on any x86-64 server with Docker Compose, on one domain of your own, with every feature on for everyone and no billing. Three settings to start (DOMAIN, ADMIN_EMAIL, SECRET_KEY_BASE); Caddy handles HTTPS; members are followable as @name@yourdomain.
See SELF_HOSTING.md for the guide: install, email, your own Terms and Privacy Policy, backups, upgrades and troubleshooting.
Images are published to GitHub Container Registry on every push to main, tagged with the commit. :latest moves only after that commit's images have booted the self-hosted setup and passed scripts/selfhost-smoke.sh:
ghcr.io/stantondev/inkwell-api:latestghcr.io/stantondev/inkwell-web:latestThe hosted instance runs on Fly.io. Deploy commands:
# API (runs migrations automatically)
fly deploy --config fly.api.toml --wait-timeout 600
# Frontend
fly deploy --config fly.web.toml --wait-timeout 600
# Meilisearch
fly deploy --config fly.search.toml --wait-timeout 600
CI/CD via GitHub Actions (.github/workflows/docker-publish.yml) builds Docker images on every push to main, runs the self-hosting smoke test against them, then tags them latest.