an atproto based link aggregator
TypeScript 65.9%
Svelte 30.9%
JavaScript 2.1%
Dockerfile 0.4%
HTML 0.2%
Shell 0.1%
CSS 0.1%
Other 0.3%
63 1 0

Clone this repository

https://tangled.org/aparker.io/papili.one
git@tangled.org:aparker.io/papili.one

For self-hosted knots, clone URLs may differ based on your setup.

README.md

papilione#

An ATProto-based link aggregator built with SvelteKit.

Status: Alpha - expect breaking changes to lexicons and features.

Features#

  • Link submissions - Share URLs with titles and optional text
  • Text posts - Post discussions without a link
  • Threaded comments - Nested comment threads on posts
  • Voting - Upvote posts and comments (private, not published to ATProto)
  • Full-text search - Search posts and comments with highlighted snippets
  • ATProto authentication - Sign in with your ATProto Account
  • Data portability - Posts and comments stored on the ATProto network via your PDS

Development#

Prerequisites#

  • Node.js 22+
  • pnpm

Quick Start#

# Install dependencies
pnpm install

# Run database migrations
pnpm db:migrate

# Set up full-text search
pnpm db:fts

# Start dev server (use 127.0.0.1 for OAuth, not localhost)
pnpm dev --host 127.0.0.1

# In another terminal, start the ingester
pnpm dev:ingester

Visit http://127.0.0.1:5173

Commands#

pnpm dev              # Start dev server
pnpm build            # Build for production
pnpm check            # Type check
pnpm test             # Run tests
pnpm lint             # Check formatting + linting
pnpm format           # Auto-format code

# Database
pnpm db:migrate       # Run database migrations
pnpm db:fts           # Set up FTS5 search indexes
pnpm db:generate      # Generate new migration after schema changes
pnpm db:studio        # Open Drizzle Studio

# Lexicons
pnpm lex:build        # Generate TypeScript from lexicons

Deployment#

Deployed on Fly.io with two apps:

# Deploy webapp (LiteFS replica)
fly deploy

# Deploy ingester (LiteFS primary)
fly deploy -c fly.ingester.toml

Lexicons#

papilione uses custom ATProto lexicons:

  • one.papili.post - Link submissions and text posts
  • one.papili.comment - Comments on posts

Contributing#

Issues and feedback: tangled.org/aparker.io/papili.one/issues

License#

MIT