Build and maintain Hollo, a federated single-user microblogging platform with ActivityPub support, Mastodon-compatible APIs, and AGPL-3.0 licensing
Develop and maintain Hollo, a federated single-user microblogging software powered by Fedify that implements the ActivityPub protocol for federation with platforms like Mastodon and Misskey, with Mastodon-compatible APIs for client integration.
```
hollo/
├── bin/ # Entry point scripts (server.ts, routes.ts)
├── src/
│ ├── api/ # Mastodon-compatible REST APIs (v1, v2)
│ ├── components/ # Hono JSX server-rendered components
│ ├── entities/ # DB → API response serialization
│ ├── federation/ # ActivityPub via Fedify (inbox, actors, objects)
│ ├── import/ # Background data import (processors, worker)
│ ├── oauth/ # OAuth 2.0/OIDC (middleware, endpoints)
│ ├── pages/ # Web UI pages (Hono JSX)
│ ├── public/ # Static assets
│ ├── index.tsx # Main Hono app composition
│ ├── schema.ts # Drizzle ORM database schema (~1300 lines)
│ └── db.ts # Database connection
├── scripts/ # Utility scripts (rebuild-timelines.ts)
├── tests/ # Test utilities and fixtures
├── drizzle/ # Database migrations (SQL files)
└── docs/ # Documentation site (Astro/Starlight)
```
**JSX Usage (Hono, NOT React)**
```typescript
// Correct - Hono JSX
export function MyComponent({ name }: { name: string }) {
return <div>{name}</div>;
}
// Incorrect - React style (don't do this)
import React from 'react';
```
**TypeScript Standards**
**Schema Changes**
1. Modify `src/schema.ts`
2. Generate migration: `pnpm migrate:generate`
3. Apply migration: `pnpm migrate` (or `pnpm migrate:test` for test DB)
**Guidelines**
**Standards**
**OAuth Implementation**
**ActivityPub Implementation**
**Key Files**
**Input Validation**
**Authentication**
**Test Structure**
```typescript
import { describe, it, expect, beforeEach } from "vitest";
import { cleanupDatabase, createFixture } from "@/../tests/helpers";
describe("MyFeature", () => {
beforeEach(async () => {
await cleanupDatabase();
});
it("should do something", async () => {
expect(result).toBe(expected);
});
});
```
**Configuration**
```bash
pnpm dev # Start dev server with hot reload
pnpm prod # Start production server
pnpm check # TypeScript check + Biome lint
pnpm test # Run tests
pnpm test:ci # Run tests without migrations (CI)
pnpm check:coverage # Tests with coverage
pnpm list:routes # Display all HTTP routes
pnpm rebuild-timelines # Rebuild home timelines
pnpm migrate # Apply pending migrations
pnpm migrate:test # Apply migrations to test DB
pnpm migrate:generate # Generate migration from schema
pnpm biome format --write . # Format code
pnpm biome check --write . # Lint and auto-fix
```
**Required**
**Storage (Filesystem)**
```env
DRIVE_DISK=fs
FS_STORAGE_PATH=/path/to/storage
STORAGE_URL_BASE=https://example.com/assets
```
**Storage (S3)**
```env
DRIVE_DISK=s3
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
S3_REGION=us-east-1
S3_BUCKET=your-bucket
STORAGE_URL_BASE=https://bucket.s3.amazonaws.com
```
**Optional**
When adding environment variables, update:
1. Source code (appropriate file: logging.ts, storage.ts, etc.)
2. AGENTS.md (this guidelines file)
3. Documentation in `docs/src/content/docs/install/*` (all languages: English, Japanese, Korean, Simplified Chinese)
4. Docker Compose files (compose.yaml, compose-fs.yaml)
5. CHANGES.md changelog
Transform database records to Mastodon API responses via `src/entities/` (e.g., `entities/status.ts`)
Long-running background jobs use import worker (`src/import/worker.ts`, `src/import/processors.ts`)
Server-rendered Hono JSX components in `src/components/` for UI, `src/pages/` for full pages
ActivityPub implementation isolated in `src/federation/` with clear separation: index (setup), actor (dispatchers), inbox (handlers), objects (dispatchers)
Leave a review
No reviews yet. Be the first to review this skill!
# Download SKILL.md from killerskills.ai/api/skills/hollo-federated-microblogging-development-ts3f5o/raw