Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/ bits Public

Open creator monetisation platform. Find your audience and make money doing what you love.

Notifications You must be signed in to change notification settings

jcf/bits

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

259 Commits

Repository files navigation

Bits

Platforms control your audience. Payment processors control your revenue. Bits gives you both back.

What you get:

  • Subscriptions, one-time purchases, digital downloads
  • Video hosting and delivery
  • Your data, your domain, your rules
  • Permissive content policies for persecuted creators

Why it works:

  • Self-host on a 5ドル/month VPS or use managed hosting
  • Single binary deployment - no complex setup
  • Built with care to minimize resource usage and maximize reliability
  • Open source - audit the code, modify what you need, contribute back

The model: Like WordPress.org - free to self-host, managed option available. You’re never locked in.

Current state: Active development. Your funding accelerates delivery.

Development

devenv up

HTTPS and *.test URLs

Setup

To get our *.test URLs to work takes some effort with DNS.

drill bits.test | awk '/^bits/ { print 1ドル "\t" 5ドル }'
HostAddress
bits.test.127.0.0.1
cat /etc/resolver/test

Test

The marketing site and "catch-all" homepage where we have no realm aren’t a priority so will return non-200 status codes.

urls=(
 # These will work, provided you've applied the seeds in `bits.dev.realm`.
 http://localhost:3000
 https://bits.page.test
 https://charlie.bits.page.test
 https://charlie.bits.page.test
 https://jcf.bits.page.test
)
for url in $urls; do
 http_code="$(curl --silent --output /dev/null --write-out "%{http_code}" "$url")"
 if [ "$http_code" -eq 200 ]; then
 echo "$url"
 else
 echo "$url ($http_code)"
 fi
done

And with a non-existent tenant, we expect a 404 response:

url="https://foo.bits.page.test"
http_code="$(curl --silent --output /dev/null --write-out "%{http_code}" "$url")"
if [ "$http_code" -eq 404 ]; then
 echo "$url"
else
 echo "$url ($http_code)"
fi

Decision records

Dev tasks

Available recipes:
 [build]
 build # Build an AOT-compiled uberjar
 build-datomic # Build Datomic Pro output
 docker-build tag="bits:latest" # Build the Docker image
 docker-run tag="bits:latest" *args # Run the Docker image against the local devenv database
 [dev]
 cluster-certs # Generate cluster keystores
 css # Regenerate Tailwind CSS from template
 fmt # Format project files
 lint # Run lints
 market # Run the marketing site
 mkcert # Create self-signed SSL certificates via mkcert
 nrepl *args
 setup # Setup a local development environment
 tailwind # Watch source code for Tailwind classes
 test *args # Run tests
 [docs]
 decide +title # Create a new decision record
 execute *args # Execute a prompt in a new Claude Code session
 prompt +title # Create a new prompt
 [iac]
 apply dir # Apply one or all Terraform projects
 init dir *args # Initialize one or all Terraform projects
 output dir *args # Interact with outputs one or all Terraform projects
 plan dir # Plan one or all Terraform projects
 [postgres]
 migration name # Create a new migration
 psql *args # Start an interactive psql session connected to the local development database

SLOC

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Language Files Lines Code Comments Blanks
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Astro 10 165 139 0 26
 Clojure 61 5760 4587 402 771
 CSS 2 84 69 4 11
 Dockerfile 1 72 50 6 16
 Edn 2 119 106 1 12
 HCL 12 389 323 13 53
 JavaScript 5 310 255 20 35
 JSON 4 59 59 0 0
 Just 1 370 241 65 64
 MDX 1 56 0 39 17
 Nix 3 501 413 14 74
 Org 13 2124 1877 6 241
 SQL 4 43 37 0 6
 SVG 2 12 12 0 0
 TOML 1 46 41 0 5
 TypeScript 3 36 30 1 5
 XML 1 18 14 1 3
 YAML 3 5056 3971 0 1085
─────────────────────────────────────────────────────────────────────────────────
 HTML 1 76 72 0 4
 |- CSS 1 171 151 0 20
 (Total) 247 223 0 24
─────────────────────────────────────────────────────────────────────────────────
 Markdown 1 352 0 228 124
 |- Clojure 1 238 152 50 36
 |- Org 1 19 12 0 7
 |- Rust 1 68 49 10 9
 (Total) 677 213 288 176
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Total 131 16144 12660 860 2624
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
051e32a-dirty @ 2026年02月15日 23:44

Prompts

We maintain version-controlled prompt docs that describe sessions with language models where we plan, generate, and review functionality.

TODO

StatusDateTitle
TODO2026年02月10日Demo Creators
DOING2026年02月13日Shop Tab
TODO2026年02月13日About Tab
TODO2026年02月13日Purchase Flow
TODO2026年02月13日Posts Feed
DOING2026年02月14日Session and Auth Security
==2026年02月15日GDPR Excision with Per-Tenant Databases
TODO2026年02月15日Presence System

DONE

StatusDateTitle
DONE2026年02月10日Prompt Workflow
DONE2026年02月10日Tenancy Routing
DONE2026年02月10日Fonts and Theme
DONE2026年02月10日Creator Profile Page
DONE2026年02月12日Asset Pipeline
DONE2026年02月12日SSE Retry Delay Configuration
DONE2026年02月14日Migrate from Datahike to Datomic Pro
DONE2026年02月15日Remove redundant indirection around Datomic API

TODOs

src/bits/app.clj:;; TODO Use Malli (or clojure.spec) to coerce and parse/validate configuration.
src/bits/asset.clj:;; TODO Make content-type explicit or more intelligent.
src/bits/auth.clj:;; TODO: I18n - user-facing strings need locale-aware source
src/bits/brotli.clj: ;; TODO: Default buffer size for brotli library, needs to be tuned.
src/bits/middleware.clj: ;; TODO Rename :sid to :session/id
src/bits/service.clj: ;; TODO Improve 404 response
src/bits/ui.clj: ;; TODO: I18n - error presentation
src/bits/ui.clj:;; TODO: I18n - user-facing strings need locale-aware source
src/bits/ui/creator.clj: ;; TODO: Real data from database
test/bits/session_test.clj: ;; FIXME Remove `:sid` from `data`.

About

Open creator monetisation platform. Find your audience and make money doing what you love.

Resources

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

AltStyle によって変換されたページ (->オリジナル) /