MCPcopy Index your code
hub / github.com/TylerFisher/sill

github.com/TylerFisher/sill @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
955 symbols 2,805 edges 295 files 26 documented · 3%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Sill

Top news from the people you trust

Sill collects links posted by the people you follow on Bluesky and Mastodon, and aggregates them into a list of the most popular links in your network.

You can find the official production version of Sill at sill.social

Architecture

Sill is a monorepo built with pnpm workspaces and Turborepo. It uses React Router for the web app, Hono for the API, and Postgres for the database.

Apps

  • apps/web/ - React Router v7 web application (port 3000)
  • apps/api/ - Hono API server (port 3001)
  • apps/worker/ - Background job processor for social media data

Packages

  • @sill/schema - Shared database schema and types (Drizzle ORM)
  • @sill/auth - Authentication utilities and OAuth
  • @sill/links - Link processing and social media integration
  • @sill/emails - Email templates (React Email) and Mailgun service

Prerequisites

  • Node.js >= 22
  • pnpm >= 10.17.1
  • Docker

You'll also need a Mailgun account for transactional emails.

Development Setup

Local Development (Recommended)

Run the database in Docker and everything else locally with hot-reload:

  1. Create your environment file and generate secrets:
cp .env.example .env
pnpm generate-secrets
  1. Start the database:
docker-compose up -d
  1. Install dependencies and start all packages:
pnpm install
pnpm dev:local
  1. Visit http://localhost:3000 (web) and http://localhost:3001 (API).

Docker Development

Run everything in containers (matches production environment):

pnpm dev:docker

Commands

Command Description
pnpm dev:local Start all packages in development mode
pnpm dev:docker Start everything in Docker containers
pnpm build Build all packages for production
pnpm lint Run Biome linter/formatter
pnpm typecheck Run TypeScript checks
pnpm test Run Vitest tests

Database

Sill uses Drizzle ORM with Postgres:

  • Schema: packages/schema/src/schema.ts
  • Migrations: packages/schema/src/migrations/
  • Config: drizzle.config.ts

Extension points exported contracts — how you extend this code

ScrobbleRecord (Interface)
* `app.rocksky.scrobble` is a music listen logged by Rocksky. The AppView * aggregates it under the track's streaming U
packages/links/src/record-mappers/scrobble.ts
SourceBadgeValue (Interface)
* Per-share source attribution. The AppView tells us how each share reached the * viewer via `RenderedLinkPost.sources`
apps/web/app/components/linkPosts/SourceBadge.tsx
LinkPostProps (Interface)
(no doc)
packages/emails/src/components/LinkPost.tsx
AboutCard (Interface)
(no doc)
packages/schema/src/index.ts
WebhookCustomerStateChangedPayload (Interface)
(no doc)
apps/api/src/routes/subscription.ts
ReviewRecord (Interface)
* `social.popfeed.feed.review` is a film / TV / game review on Popfeed. The link * card carries the work (title, poster
packages/links/src/record-mappers/popfeed.ts
SubscriptionCalloutProps (Interface)
(no doc)
apps/web/app/components/subscription/SubscriptionCallout.tsx
RSSLinksProps (Interface)
(no doc)
packages/emails/src/components/RSSLinks.tsx

Core symbols most depended-on inside this repo

get
called by 274
packages/auth/src/storage.ts
set
called by 141
packages/auth/src/storage.ts
createApiClient
called by 68
apps/web/app/utils/api-client.server.ts
getUserIdFromSession
called by 56
packages/auth/src/auth.ts
requireUserFromContext
called by 41
apps/web/app/utils/context.server.ts
toDbDate
called by 14
packages/links/src/record-mappers/shared.ts
createOAuthClient
called by 13
packages/auth/src/client.ts
escapeHtml
called by 12
packages/links/src/record-mappers/shared.ts

Shape

Function 799
Interface 137
Method 13
Class 6

Languages

TypeScript100%

Modules by API surface

apps/web/app/utils/api-client.server.ts75 symbols
packages/links/src/appview.ts47 symbols
packages/links/src/record-mappers/shared.ts23 symbols
packages/links/src/bluesky.ts20 symbols
packages/links/src/links.ts19 symbols
packages/links/src/record-mappers/standard-site.ts18 symbols
packages/links/src/mastodon.ts18 symbols
packages/links/src/timeline.ts16 symbols
packages/auth/src/storage.ts14 symbols
packages/auth/src/auth.ts13 symbols
apps/web/app/components/forms/FilterPresetList.tsx13 symbols
apps/web/app/components/download/EmailStep.tsx13 symbols

For agents

$ claude mcp add sill \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact