# GIGA.FORA - Complete Documentation
> GIGA.FORA is an open, anonymous forum platform where ideas connect. No login required. Users can share thoughts, spark discussions, and discover connections between ideas through linked posts and trending tags.
## About GIGA.FORA
GIGA.FORA is a modern web forum built for the new era of open discourse. The platform emphasizes:
1. **Accessibility**: No barriers to entry - start posting immediately
2. **Privacy**: Anonymous by design with auto-generated pseudonyms
3. **Connection**: Link posts together to show relationships between ideas
4. **Discovery**: Trending tags and multiple sort options help surface relevant content
### Why GIGA.FORA?
Traditional forums require registration, email verification, and profile setup. GIGA.FORA removes these friction points while maintaining quality through community moderation (voting and reporting).
## Features
### Posting
- Create posts with title (max 75 chars), body (max 2500 chars), and tags (up to 5)
- Rich text editing with Quill editor
- Markdown support for formatting
- Link to other posts to create idea connections
### Engagement
- Upvote/downvote posts and comments
- Threaded comments on posts
- Report inappropriate content
- Share posts via direct links
### Discovery
- **Hot**: Algorithmically ranked by engagement and recency
- **New**: Chronological, newest first
- **Top**: Highest voted posts
- **Tags**: Filter by topic tags
- **Search**: Full-text search across posts
### User Identity
- Auto-generated anonymous usernames stored in browser
- Consistent identity across sessions (same device)
- No tracking or personal data collection
### Multi-tenant Comments Product
- Hosted embed for external blogs via `https://giga.mobile/embed.js`
- Tenant-isolated sites, domains, threads, and billing plans
- **Direct-render mode** (default): Shadow DOM, no iframe, zero layout shift
- **Iframe mode** (legacy): available via `data-mode="iframe"`
- **CLI quickstart**: `npx create-fora` — anonymous, no auth, ~15 seconds, outputs framework snippet
- **Framework adapters**: Astro, Hugo, Jekyll, 11ty, Hakyll, HTML
- **SSR-safe comment count**: `GET /api/embed/count` — use at build time
- **JSON-LD structured data**: `GET /api/embed/structured-data` — DiscussionForumPosting schema
- **Webhooks**: `comment.created` events with HMAC-SHA256 signatures
- **Public JS API**: `Fora.mount()`, `Fora.update()`, `Fora.unmount()`, `Fora.count()`
- Plan packaging:
- Free: core comments, comment voting, reply threads, moderation report actions
- Pro ($49/mo): adds post actions (vote/reactions/share) + advanced branding controls + full analytics
- Business ($199/mo): adds team/admin controls, higher quotas, priority support
- Free add-ons: `feature_pack` (premium interactions) and `analytics_pack` (full analytics)
- Base plans are account-scoped; sites inherit account plan limits and entitlements.
- Publisher entry points:
- Dashboard: `/publishers`
- Terms: `/terms/`
- Privacy: `/privacy/`
- Sitemap: `/sitemap.xml`
- Robots: `/robots.txt`
- AI docs: `/ai`
- Agent install guide: `/ai/comments-install`
- Agent OpenAPI spec: `/openapi-agent.json`
### Framework Adapters
| Framework | Package | Install |
|-----------|---------|---------|
| Astro | `astro-fora` | `npm install astro-fora` |
| Eleventy (11ty) | `fora-eleventy-plugin` | `npm install fora-eleventy-plugin` |
| Jekyll | `jekyll-fora` | `gem install jekyll-fora` |
| Hakyll | template + module | see `/docs/hakyll` |
| Any HTML | `
```
**Astro:**
```astro
---
import { ForaComments } from 'astro-fora';
---
```
### Embed Data Attributes
| Attribute | Required | Description |
|-----------|----------|-------------|
| `data-site-key` | ✅ | Your Fora site key |
| `data-page-id` | — | Thread identifier (defaults to current path) |
| `data-page-title` | — | Page title |
| `data-theme` | — | `auto`, `light`, `dark` |
| `data-mode` | — | `direct` (default) or `iframe` (legacy) |
| `data-container-id` | — | DOM mount point (default: `giga-fora-comments`) |
| `data-features` | — | Comma-separated feature flags |
| `data-accent` | — | Accent color override |
| `data-bg` | — | Background color override |
| `data-surface` | — | Surface color override |
| `data-text` | — | Text color override |
| `data-font` | — | Font family override |
| `data-radius` | — | Border radius override |
## Technical Architecture
### Frontend
- Pure vanilla JavaScript (no framework dependencies)
- Responsive CSS with dark/light theme support
- Quill rich text editor for post composition
- Turndown for HTML-to-Markdown conversion
- Marked for Markdown-to-HTML rendering
### Backend (Cloudflare Workers)
- Serverless edge computing
- D1 SQLite database for persistence
- RESTful API design
- CORS-enabled for cross-origin requests
### Database Schema
- `posts`: id, title, body, author, tags, votes, created_at
- `comments`: id, post_id, parent_id, body, author, votes, created_at
- `post_links`: source_id, target_id (for linked posts)
- `reports`: id, content_type, content_id, reason, details, created_at
- Multi-tenant and SaaS tables:
- `sites`, `site_domains`, `threads`
- `site_billing`, `site_feature_flags`, `site_theme_settings`, `site_usage_daily`, `site_analytics_events`
- `tenant_users`, `tenant_identities`, `tenant_sessions`, `magic_link_tokens`, `oauth_states`, `site_memberships`, `site_agent_tokens`
## API Reference
Base URL: `https://giga.fora/api/`
### Posts
#### List Posts
```
GET /api/posts?sort=hot&tag=tech&search=query&limit=20&offset=0
```
Response:
```json
{
"posts": [
{
"id": "abc123",
"title": "Post title",
"body": "Post content...",
"author": "AnonymousUser42",
"tags": ["tech", "ideas"],
"votes": 15,
"comment_count": 3,
"created_at": "2025-01-20T10:30:00Z"
}
],
"total": 100,
"has_more": true
}
```
#### Get Single Post
```
GET /api/posts/:id
```
#### Create Post
```
POST /api/posts
Content-Type: application/json
{
"title": "My Post Title",
"body": "Post content in markdown",
"tags": ["tag1", "tag2"],
"author": "MyUsername",
"linked_posts": ["other-post-id"]
}
```
#### Vote on Post
```
POST /api/posts/:id/vote
Content-Type: application/json
{
"direction": 1, // 1 for upvote, -1 for downvote
"voter_id": "unique-voter-identifier"
}
```
### Comments
#### Add Comment
```
POST /api/posts/:id/comments
Content-Type: application/json
{
"body": "Comment text",
"author": "Username",
"parent_id": null // or comment ID for replies
}
```
#### Vote on Comment
```
POST /api/comments/:id/vote
Content-Type: application/json
{
"direction": 1,
"voter_id": "unique-voter-identifier"
}
```
### Tags
#### Get Trending Tags
```
GET /api/tags?limit=10
```
Response:
```json
{
"tags": [
{"name": "tech", "count": 45},
{"name": "ideas", "count": 32}
]
}
```
### Reports
#### Report Content
```
POST /api/reports
Content-Type: application/json
{
"content_type": "post", // or "comment"
"content_id": "abc123",
"reason": "spam",
"details": "Optional additional context"
}
```
### Multi-tenant Embed
Multi-tenant embed endpoints are served from `https://giga.mobile`.
#### Bootstrap (required entrypoint)
```
POST /api/embed/bootstrap
```
Request includes:
- `site_key`
- `page_identifier`
- `page_url` (optional but recommended)
- `page_title` (optional)
- `requested_features` (optional)
Response includes:
- `ctx` (short-lived signed embed context)
- `thread_id`, `post_id`
- `site_plan`
- `effective_features`
- `theme_defaults`
- `post_summary`
- `frame_url` (`/embed/frame?ctx=...`)
#### Frame
```
GET /embed/frame?ctx=...
```
Notes:
- Legacy frame parameter shape (`site_key`, `page_identifier`, etc.) is removed and returns `410`.
#### Thread Comments
```
GET /api/embed/threads/:threadId/comments?ctx=...
POST /api/embed/threads/:threadId/comments // ctx in body
```
#### Thread Post Actions (optional, plan-gated)
```
GET /api/embed/threads/:threadId/post?ctx=...
POST /api/embed/threads/:threadId/post/vote // ctx in body
DELETE /api/embed/threads/:threadId/post/vote // ctx in body
POST /api/embed/threads/:threadId/post/reactions // ctx in body
DELETE /api/embed/threads/:threadId/post/reactions // ctx in body
POST /api/embed/threads/:threadId/post/share // ctx in body
```
#### Legacy Contract Status
- `POST /api/embed/thread/resolve` is removed and returns `410`.
- Embed action requests without `ctx` are treated as legacy and return `410`.
### Publisher Auth + Billing
#### Auth
```
POST /api/auth/magic-link/request
GET /api/auth/magic-link/verify
GET /api/auth/google/start
GET /api/auth/google/callback
GET /api/auth/me
POST /api/auth/logout
```
#### Tenant Site Management
```
GET /api/tenant/sites
POST /api/tenant/sites
GET /api/tenant/billing-accounts
POST /api/tenant/billing-accounts/merge
GET /api/tenant/sites/:siteId
GET /api/tenant/sites/:siteId/analytics?range=7|30|90
POST /api/tenant/sites/:siteId/transfer-request
POST /api/tenant/site-transfers/accept
PATCH /api/tenant/sites/:siteId/features
PATCH /api/tenant/sites/:siteId/theme
PATCH /api/tenant/sites/:siteId/domains
POST /api/tenant/sites/:siteId/agent-tokens
DELETE /api/tenant/sites/:siteId/agent-tokens/:tokenId
```
#### Billing
```
POST /api/billing/checkout-session
POST /api/billing/customer-portal
POST /api/billing/stripe-webhook
```
Add-on entitlement behavior:
- `feature_pack` and `analytics_pack` can both be active on Free.
- Pro/Business include analytics by default (no `analytics_pack` required).
#### Agent Install + Validation
```
POST /api/agent/embed/install
POST /api/agent/embed/validate
```
## Content Policy
### Allowed Content
- Open discussion of ideas, opinions, and topics
- Questions and answers
- Creative writing and storytelling
- News and current events discussion
- Technical discussions and help
### Prohibited Content
- Spam or commercial advertising
- Harassment, bullying, or personal attacks
- Deliberate misinformation
- Hate speech targeting protected groups
- Threats of violence
- Illegal content
## Contact
GIGA.FORA is an open platform. For technical issues or inquiries, posts can be made with the `meta` tag for community discussion.
## Comparisons
### Feature Matrix (Fora vs Alternatives)
| Feature | Fora | Disqus | Commento | Isso | giscus | Cusdis | utterances | Coral |
|---------|------|--------|----------|------|--------|--------|------------|-------|
| Free tier | ✓ Unlimited | ✓ With ads | ✓ Paid plans only | ✗ Self-host only | ✓ Free | ✓ Free | ✓ Free | ✗ |
| Hosted option | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ |
| Self-hosting | ✓ CF Workers | ✗ | ✓ Docker | ✓ Python | ✗ | ✓ Node.js | ✗ | ✓ Docker |
| Framework adapters | Astro, Hugo, Jekyll, 11ty, Hakyll | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Privacy | ✓ No tracking | ✗ Ad-tech | ✓ | ✓ | Neutral | ✓ | Neutral | Neutral |
| Analytics | ✓ Fora Dashboard | ✓ Built-in | ✗ | ✗ | ✓ GitHub | ✗ | ✓ GitHub | ✓ Built-in |
| Data export | ✓ Anytime | ✗ Limited | ✓ Self-hosted | ✓ Self-hosted | ✗ Limited | ✓ Self-hosted | ✗ Limited | ✗ Limited |
| Anonymous comments | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| CLI quickstart | `npx create-fora` | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Reactions | ✓ | ✗ | ✗ | ✗ | ✓ GitHub | ✗ | ✓ GitHub | ✓ |
| Webhooks | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
Full comparison pages: `/vs/disqus.html`, `/vs/commento.html`, `/vs/isso.html`, `/vs/giscus.html`, `/vs/cusdis.html`, `/vs/utterances.html`, `/vs/coral.html`