max / makenotwork
20 files changed,
+35 insertions,
-35 deletions
| @@ -178,5 +178,4 @@ All OAuth errors redirect to `/?error={code}`. The error code is a query paramet | |||
| 178 | 178 | - `src/csrf.rs` -- CSRF token generation, middleware, constant-time comparison | |
| 179 | 179 | - `src/internal_auth.rs` -- HMAC-SHA256 auth for MNW-to-MT internal API (separate from OAuth) | |
| 180 | 180 | - `src/main.rs` -- session store setup, session layer config, middleware stack | |
| 181 | - | - `deploy/env.hetzner` -- production env vars (hetzner) | |
| 182 | - | - `deploy/env.production` -- production env vars (astra) | |
| 181 | + | - `deploy/deploy-hetzner.sh`, `deploy/deploy.sh` -- deploy scripts (production env vars are provisioned on-server, not committed to the repo) |
| @@ -344,7 +344,7 @@ Two spawned Tokio tasks, coordinated via `watch::channel` for graceful shutdown: | |||
| 344 | 344 | | Error types | `src/error.rs` | | |
| 345 | 345 | | Authentication | `src/auth.rs` | | |
| 346 | 346 | | CSRF middleware | `src/csrf.rs` | | |
| 347 | - | | Database modules | `src/db/` (49 submodules) | | |
| 347 | + | | Database modules | `src/db/` (65 files) | | |
| 348 | 348 | | Route modules | `src/routes/` (17 submodules) | | |
| 349 | 349 | | Template structs | `src/templates/` | | |
| 350 | 350 | | Email service | `src/email/` | |
| @@ -608,7 +608,7 @@ Per-user staging dirs at `/var/lib/mnw-cli/staging/{user_id}/`. Cleaned up: | |||
| 608 | 608 | ||
| 609 | 609 | ## Key Paths | |
| 610 | 610 | ||
| 611 | - | - Design doc: `docs/mnw/server/cli.md` (this file) | |
| 611 | + | - Design doc: `server/docs/cli.md` (this file) | |
| 612 | 612 | - Project code: `mnw-cli/` | |
| 613 | 613 | - MNW API routes: `MNW/server/src/routes/api/` | |
| 614 | 614 | - MNW SSH key storage: `MNW/server/src/db/` (user_ssh_keys queries) |
| @@ -8,7 +8,7 @@ What you keep on Makenot.work versus other platforms at $500, $2,000, and $10,00 | |||
| 8 | 8 | ||
| 9 | 9 | All numbers assume US Stripe rates (2.9% + $0.30) and an **average fan transaction of $10**. Per-transaction cost depends on sale count, not just gross revenue; see [How We Work § The Math](./how-we-work.md#the-math) for the full breakdown. Patreon's row uses their "Pro" tier (8%); their Lite (5%) and Premium (12%) tiers shift the column up and down respectively. | |
| 10 | 10 | ||
| 11 | - | The Makenot.work range reflects the lowest tier ($16, Basic) at the high end and the highest tier ($60, Everything) at the low end. | |
| 11 | + | The Makenot.work range reflects the lowest tier (${{ tiers.standard.basic }}, Basic) at the high end and the highest tier (${{ tiers.standard.everything }}, Everything) at the low end. | |
| 12 | 12 | ||
| 13 | 13 | ### At $500/month revenue (50 sales × $10) | |
| 14 | 14 | ||
| @@ -90,7 +90,7 @@ Discovery is driven entirely by fan intent: search, filters, tags, feeds, sortin | |||
| 90 | 90 | | **Break-even vs 10%** | ~$160-600/mo revenue | N/A | N/A | N/A | N/A | | |
| 91 | 91 | | **Break-even vs 8%** | ~$200-750/mo revenue | N/A | N/A | N/A | N/A | | |
| 92 | 92 | ||
| 93 | - | Break-even is `subscription / platform-percentage`. Below that revenue, the percentage-cut platform costs you less; above it, the flat fee wins and the gap widens with every dollar earned. The ranges above span the Basic tier ($16) at the low end to Everything ($60) at the high end. | |
| 93 | + | Break-even is `subscription / platform-percentage`. Below that revenue, the percentage-cut platform costs you less; above it, the flat fee wins and the gap widens with every dollar earned. The ranges above span the Basic tier (${{ tiers.standard.basic }}) at the low end to Everything (${{ tiers.standard.everything }}) at the high end. | |
| 94 | 94 | ||
| 95 | 95 | --- | |
| 96 | 96 | ||
| @@ -121,7 +121,7 @@ If you already have your own website, mailing list, file hosting, and audience p | |||
| 121 | 121 | Be honest about what you need: | |
| 122 | 122 | ||
| 123 | 123 | - **You need algorithmic amplification.** If you have no existing audience and need a platform to surface your work via recommendations, Bandcamp's editorial picks or YouTube's algorithm will serve you better today. | |
| 124 | - | - **You earn under $107/month.** A 10-15% cut costs less than our $16 minimum. itch.io's optional revenue share (including 0%) is hard to beat at small scale. | |
| 124 | + | - **You earn under $107/month.** A 10-15% cut costs less than our ${{ tiers.standard.basic }} minimum. itch.io's optional revenue share (including 0%) is hard to beat at small scale. | |
| 125 | 125 | - **You need community features.** If comments, polls, and DMs with fans are core to your model, Patreon has those. We have forums. | |
| 126 | 126 | - **You sell physical products.** We don't handle shipping, inventory, or physical fulfillment. | |
| 127 | 127 | ||
| @@ -131,6 +131,6 @@ We'd rather you pick the right platform than sign up and be disappointed. | |||
| 131 | 131 | ||
| 132 | 132 | ## See Also | |
| 133 | 133 | ||
| 134 | - | - [Platform Economics](./economics.md): What it costs to run, where the money goes | |
| 134 | + | - [Platform Economics](/economics): What it costs to run, where the money goes | |
| 135 | 135 | - [Pricing Tiers](../guide/tiers.md): What each tier includes | |
| 136 | 136 | - [Our Story](./story.md): Why we built this |
| @@ -1,6 +1,6 @@ | |||
| 1 | 1 | # Credits | |
| 2 | 2 | ||
| 3 | - | This page lists the third-party software, services, fonts, and standards Makenotwork is built on, along with their licenses and homepages. Only direct dependencies are enumerated; transitive dependencies (the dependencies of our dependencies) run into the hundreds and aren't listed here. Makenotwork itself ships under PolyForm Noncommercial 1.0.0. | |
| 3 | + | This page lists the third-party software, services, fonts, and standards Makenot.work is built on, along with their licenses and homepages. Only direct dependencies are enumerated; transitive dependencies (the dependencies of our dependencies) run into the hundreds and aren't listed here. Makenot.work itself ships under PolyForm Noncommercial 1.0.0. | |
| 4 | 4 | ||
| 5 | 5 | --- | |
| 6 | 6 |
| @@ -84,7 +84,7 @@ Filters apply to the Discover page, search results, and tag browsing. The tier i | |||
| 84 | 84 | The tier system is self-reported by creators. We enforce it through: | |
| 85 | 85 | ||
| 86 | 86 | 1. **The disclosure statement.** Assisted-tier creators put their AI use in writing. If the product contradicts the disclosure, that is documented misrepresentation. | |
| 87 | - | 2. **Community reports.** Fans and fellow creators can flag items they believe are misclassified by emailing [reports@makenot.work](mailto:reports@makenot.work) with the item URL and what they think the correct tier should be. An in-app report flow is on the roadmap. | |
| 87 | + | 2. **Community reports.** Fans and fellow creators can flag an item they believe is misclassified with the Report link on its page (choose "Mislabeled"). You can also email [reports@makenot.work](mailto:reports@makenot.work) with the item URL and the tier you think it should be. | |
| 88 | 88 | 3. **Moderation review.** Misrepresenting your tier is treated as fraud. Consequences follow the [Acceptable Use Policy](../legal/acceptable-use.md), up to and including account termination. | |
| 89 | 89 | ||
| 90 | 90 | If you used AI, say so, explain how, and let your audience decide. That is the point of the Assisted tier. |
| @@ -134,7 +134,7 @@ Prices won't go up unless infrastructure costs force it. If they ever do, we'll | |||
| 134 | 134 | ||
| 135 | 135 | ### Where Your Money Goes | |
| 136 | 136 | ||
| 137 | - | Surplus from creator tier fees funds, in order: operations and infrastructure (~$580/month today), the founder's wage on a flat pay scale that will apply equally to every resident, residency hires after 1.0 ships, reserves, and platform development. No investors taking dividends, no board taking compensation. The residency trains engineers without traditional credentials into full-stack engineers; the goal is graduation, not retention. See [Team](/team) for who's currently on this and [Platform Economics](./economics.md) for the full financial breakdown. | |
| 137 | + | Surplus from creator tier fees funds, in order: operations and infrastructure (~$580/month today), the founder's wage on a flat pay scale that will apply equally to every resident, residency hires after 1.0 ships, reserves, and platform development. No investors taking dividends, no board taking compensation. The residency trains engineers without traditional credentials into full-stack engineers; the goal is graduation, not retention. See [Team](/team) for who's currently on this and [Platform Economics](/economics) for the full financial breakdown. | |
| 138 | 138 | ||
| 139 | 139 | --- | |
| 140 | 140 | ||
| @@ -152,7 +152,7 @@ Artists, musicians, writers, developers, and makers who: | |||
| 152 | 152 | ||
| 153 | 153 | ## See Also | |
| 154 | 154 | ||
| 155 | - | - [Platform Economics](./economics.md): What it costs to run, where the money goes | |
| 155 | + | - [Platform Economics](/economics): What it costs to run, where the money goes | |
| 156 | 156 | - [You're the Merchant of Record](./merchant-of-record.md): What it means, pros and cons, tax tools | |
| 157 | 157 | - [Generative AI Policy](./generative-ai.md): Content tiers and disclosure requirements | |
| 158 | 158 | - [What We Guarantee](./guarantees.md): Binding commitments, in writing |
| @@ -132,4 +132,4 @@ That means you make the decisions about pricing, refunds, and how you handle you | |||
| 132 | 132 | - [Receiving Payouts](../guide/payouts.md): Payout schedules, international payments, tax information | |
| 133 | 133 | - [Pricing Tiers](../guide/tiers.md): What each tier costs and includes | |
| 134 | 134 | - [What We Guarantee](./guarantees.md): Binding commitments on revenue, data, and pricing | |
| 135 | - | - [Platform Economics](./economics.md): What it costs to run, where the money goes | |
| 135 | + | - [Platform Economics](/economics): What it costs to run, where the money goes |
| @@ -14,7 +14,7 @@ When a platform takes venture capital, the pressure compounds. Investors need re | |||
| 14 | 14 | ||
| 15 | 15 | ## The Alternative | |
| 16 | 16 | ||
| 17 | - | We charge a flat monthly fee based on what you need to host: $16 for text, $24 for audio and software, $36 for video and large files, $60 for all features, current and future. We take 0% of your revenue. The only deduction from fan payments is the payment processor's fee (~3%), which goes to the processor, not us. | |
| 17 | + | We charge a flat monthly fee based on what you need to host: ${{ tiers.standard.basic }} for text, ${{ tiers.standard.small_files }} for audio and software, ${{ tiers.standard.big_files }} for video and large files, ${{ tiers.standard.everything }} for all features, current and future. We take 0% of your revenue. The only deduction from fan payments is the payment processor's fee (~3%), which goes to the processor, not us. | |
| 18 | 18 | ||
| 19 | 19 | Your tier fee funds the platform. No incentive to take a cut of your sales, show ads to your fans, or lock you in. | |
| 20 | 20 | ||
| @@ -42,7 +42,7 @@ Your fans are your fans. Your revenue is your revenue. Your data is your data. P | |||
| 42 | 42 | ||
| 43 | 43 | - [Team](/team): Who's behind Makenot.work | |
| 44 | 44 | - [How We Work](./how-we-work.md): Pricing, payment flow, and data portability | |
| 45 | - | - [Platform Economics](./economics.md): What it costs to run, where the money goes | |
| 45 | + | - [Platform Economics](/economics): What it costs to run, where the money goes | |
| 46 | 46 | - [Generative AI Policy](./generative-ai.md): What we mean by generative AI and how content is classified | |
| 47 | 47 | - [What We Guarantee](./guarantees.md): Binding commitments, in writing | |
| 48 | 48 | - [Roadmap](./roadmap.md): What we're building next |
| @@ -18,7 +18,7 @@ Your OAuth client ID is the API key of your SyncKit app. Create a SyncKit app fr | |||
| 18 | 18 | ||
| 19 | 19 | **Localhost**: `http://127.0.0.1:{port}/...` and `http://localhost:{port}/...` are always allowed without registration. Use these for desktop apps. | |
| 20 | 20 | ||
| 21 | - | **Remote**: Non-localhost redirect URIs must be registered on your SyncKit app. Contact support to add them. | |
| 21 | + | **Remote**: Non-localhost redirect URIs must be registered on your SyncKit app. Email info@makenot.work to add them. | |
| 22 | 22 | ||
| 23 | 23 | ## Authorization Request | |
| 24 | 24 |
| @@ -107,7 +107,7 @@ Direct relationships mean direct responsibility. When fans reach out, respond. T | |||
| 107 | 107 | ## See Also | |
| 108 | 108 | ||
| 109 | 109 | - [Pricing Models](../about/pricing.md): Fixed price, PWYW, and memberships | |
| 110 | - | - [Uploading & Downloads](./files.md): File formats and quality | |
| 110 | + | - [Audio Hosting](./audio.md): File formats and quality | |
| 111 | 111 | - [Tagging](./tags.md): Organizing your catalog | |
| 112 | 112 | - [Analytics & Dashboard](./analytics.md): Understanding your stats | |
| 113 | 113 | - [Contact Sharing](./contact-sharing.md): Building direct fan relationships |
| @@ -168,7 +168,7 @@ You can start shared and transition later: create individual accounts, add them | |||
| 168 | 168 | After your first publish: | |
| 169 | 169 | ||
| 170 | 170 | 1. **Fill out your profile.** Bio, avatar, header image, links. See [Profile](./profile.md). | |
| 171 | - | 2. **Set up security.** Enable two-factor authentication and save your backup codes. See [Security](../tech/security.md). | |
| 171 | + | 2. **Set up security.** Enable two-factor authentication and save your backup codes. See [Security](./security.md). | |
| 172 | 172 | 3. **Share your link.** Post your profile URL, project URL, or direct purchase link (`/buy/{item_id}`) wherever your audience is. Purchase links are minimal pages optimized for social media and link-in-bio; fans buy in one step without an account. You can also [point your own domain](./custom-domains.md) at your profile. | |
| 173 | 173 | 4. **Set up RSS cross-posting.** Connect your RSS feed to social media or newsletter tools. See [RSS](./rss.md). | |
| 174 | 174 | 5. **Fill in metadata.** Good titles, descriptions, tags, and cover art make your content discoverable. See [Metadata](./metadata.md). Per-file size limits depend on your [tier](./tiers.md). |
| @@ -154,6 +154,6 @@ Deleting an item removes it permanently. Fans who purchased it lose access. Acti | |||
| 154 | 154 | ||
| 155 | 155 | - [Projects](./projects.md): Organizing items into projects | |
| 156 | 156 | - [Content Overview](./02-content.md): Content types, versions, and chapters in detail | |
| 157 | - | - [Uploading & Downloads](./files.md): File formats and download process | |
| 157 | + | - [Audio Hosting](./audio.md): File formats and download process | |
| 158 | 158 | - [Tagging System](./tags.md): Hierarchical tags for organization | |
| 159 | 159 | - [Metadata & SEO](./metadata.md): Descriptions and discoverability |
| @@ -88,6 +88,6 @@ The two things that matter most for discoverability are your **title** and **des | |||
| 88 | 88 | ||
| 89 | 89 | ## See Also | |
| 90 | 90 | ||
| 91 | - | - [Uploading & Downloads](./files.md): File formats and auto-extraction | |
| 91 | + | - [Audio Hosting](./audio.md): File formats and metadata auto-extraction | |
| 92 | 92 | - [Tagging System](./tags.md): Hierarchical tag structure and best practices | |
| 93 | 93 | - [Items](./items.md): Items, projects, and organization |
| @@ -65,4 +65,4 @@ Your RSS feed can trigger actions on other platforms: | |||
| 65 | 65 | ||
| 66 | 66 | - [Items](./items.md): Creating and managing content | |
| 67 | 67 | - [Metadata & SEO](./metadata.md): Feed metadata and discoverability | |
| 68 | - | - [Uploading & Downloads](./files.md): Audio formats and upload process | |
| 68 | + | - [Audio Hosting](./audio.md): Audio formats and upload process |
| @@ -54,7 +54,7 @@ For platform builds (macOS / Windows / Linux), upload each as a separate version | |||
| 54 | 54 | ||
| 55 | 55 | ## License Keys | |
| 56 | 56 | ||
| 57 | - | For paid software, generate [license keys](./license-keys.md) per purchase. Keys are issued on purchase and visible in the fan's library next to the download link. | |
| 57 | + | For paid software, generate [license keys](../developer/license-keys.md) per purchase. Keys are issued on purchase and visible in the fan's library next to the download link. | |
| 58 | 58 | ||
| 59 | 59 | --- | |
| 60 | 60 | ||
| @@ -75,5 +75,5 @@ Fans who purchase the item or subscribe to a tier can download the file directly | |||
| 75 | 75 | - [Audio Hosting](./audio.md) | |
| 76 | 76 | - [Video Hosting](./video.md) | |
| 77 | 77 | - [Items](./items.md): organizing items and projects | |
| 78 | - | - [License Keys](./license-keys.md): per-purchase keys for paid software | |
| 78 | + | - [License Keys](../developer/license-keys.md): per-purchase keys for paid software | |
| 79 | 79 | - [OTA Updates](../developer/ota.md): in-app update polling |
| @@ -16,14 +16,14 @@ Stripe handles all payments. You're the merchant of record. We don't take a cut | |||
| 16 | 16 | ||
| 17 | 17 | When fans buy your content or join a membership: | |
| 18 | 18 | ||
| 19 | - | 1. Fan pays via Stripe (~2.9% + $0.30 per transaction) | |
| 19 | + | 1. Fan pays via Stripe (~{{ stripe.percent | percent }} + {{ stripe.fixed | money }} per transaction) | |
| 20 | 20 | 2. Funds go directly to your connected Stripe account | |
| 21 | 21 | 3. Deposits to your bank on your chosen schedule | |
| 22 | 22 | 4. We never touch or hold your money | |
| 23 | 23 | ||
| 24 | 24 | ### Platform Membership | |
| 25 | 25 | ||
| 26 | - | Your monthly Makenot.work membership ($10-60) is separate: | |
| 26 | + | Your monthly Makenot.work membership (${{ tiers.standard.basic }}-${{ tiers.standard.everything }}) is separate: | |
| 27 | 27 | ||
| 28 | 28 | - Billed to your payment method | |
| 29 | 29 | - Goes to us for platform access |
| @@ -19,10 +19,10 @@ Yes. Fan accounts are completely free. You only pay for content you choose to bu | |||
| 19 | 19 | ||
| 20 | 20 | Creator tier fees (what you pay to host content): | |
| 21 | 21 | ||
| 22 | - | - **Basic** ($16/month): Text, blog posts, promo codes, mailing lists | |
| 23 | - | - **Small Files** ($24/month): Everything in Basic, plus audio uploads (MP3, WAV, FLAC, OGG, AAC, AIFF) | |
| 24 | - | - **Big Files** ($36/month): Everything in Small Files, plus video uploads (MP4, WebM, MOV) and larger file limits | |
| 25 | - | - **Everything** ($60/month): All current and future features, first access to new capabilities as they ship | |
| 22 | + | - **Basic** (${{ tiers.standard.basic }}/month): Text, blog posts, promo codes, mailing lists | |
| 23 | + | - **Small Files** (${{ tiers.standard.small_files }}/month): Everything in Basic, plus audio uploads (MP3, WAV, FLAC, OGG, AAC, AIFF) | |
| 24 | + | - **Big Files** (${{ tiers.standard.big_files }}/month): Everything in Small Files, plus video uploads (MP4, WebM, MOV) and larger file limits | |
| 25 | + | - **Everything** (${{ tiers.standard.everything }}/month): All current and future features, first access to new capabilities as they ship | |
| 26 | 26 | ||
| 27 | 27 | See [Pricing Tiers](../guide/tiers.md) for storage limits, per-file size limits, and detailed feature comparisons. | |
| 28 | 28 | ||
| @@ -30,7 +30,7 @@ See [Pricing Tiers](../guide/tiers.md) for storage limits, per-file size limits, | |||
| 30 | 30 | Through Stripe. Payments go directly to your connected Stripe account. You control payout timing from your Stripe dashboard. | |
| 31 | 31 | ||
| 32 | 32 | ### What if I earn nothing? Do I still pay? | |
| 33 | - | Yes. The tier fee covers platform access, not a share of revenue. We know $16/month is real money if you're just starting out or making work that doesn't sell in volume. That's a real tension with this model, and we don't pretend otherwise. The tradeoff is that when you do sell, you keep everything. There's no percentage cut that grows as you grow. An [earn-back credit program](../about/roadmap.md#earn-back-credit-program) is on the roadmap to address this. We may also accept applications for fee remission for supported causes and open source work. | |
| 33 | + | Yes. The tier fee covers platform access, not a share of revenue. We know ${{ tiers.standard.basic }}/month is real money if you're just starting out or making work that doesn't sell in volume. That's a real tension with this model, and we don't pretend otherwise. The tradeoff is that when you do sell, you keep everything. There's no percentage cut that grows as you grow. An [earn-back credit program](../about/roadmap.md#earn-back-credit-program) is on the roadmap to address this. We may also accept applications for fee remission for supported causes and open source work. | |
| 34 | 34 | ||
| 35 | 35 | ### What if I don't earn back my membership cost? | |
| 36 | 36 | An earn-back credit program is on the [roadmap](../about/roadmap.md#earn-back-credit-program) (expected no later than January 2027): if you earn less on the platform than you paid in tier fees over 12 months, the difference is credited as free months for the following year (capped at 12 months). The 12-month clock starts when the alpha period ends. | |
| @@ -137,7 +137,7 @@ Account info you provide, content you upload, transactions you conduct. No brows | |||
| 137 | 137 | No. Outside investment means someone eventually needs a return. Returns come from raising fees, adding ads, or selling data. We'd rather stay small and stay honest. | |
| 138 | 138 | ||
| 139 | 139 | ### Will you ever run ads? | |
| 140 | - | No. Ads mean tracking. Tracking means your fans become the product. We'd rather charge you $16/month and leave your audience alone. | |
| 140 | + | No. Ads mean tracking. Tracking means your fans become the product. We'd rather charge you ${{ tiers.standard.basic }}/month and leave your audience alone. | |
| 141 | 141 | ||
| 142 | 142 | ### Will you ever take a cut of revenue? | |
| 143 | 143 | No. If we did, we'd be profiting from your success instead of hosting it. | |
| @@ -152,7 +152,7 @@ The payment processor holds funds in your account, not ours. No commingling of c | |||
| 152 | 152 | <!-- SOP: internal/business/sops/shutdown-notice.md --> | |
| 153 | 153 | ||
| 154 | 154 | ### How long can you sustain this? | |
| 155 | - | Self-funded, no debt, breaks even at ~{{ derived.break_even_standard | ceil }} creators at standard rates, operating costs ~${{ expenses.F_monthly }}/month fixed. If growth is slower than expected, options include voluntary support, reducing scope, or raising revenue through existing tiers. If the platform doesn't prove viable, the [shutdown protocol](../about/guarantees.md#shutdown-protocol) guarantees 90 days notice with full export access. See [Platform Economics](../about/economics.md) for the full cost structure. | |
| 155 | + | Self-funded, no debt, breaks even at ~{{ derived.break_even_standard | ceil }} creators at standard rates, operating costs ~${{ expenses.F_monthly }}/month fixed. If growth is slower than expected, options include voluntary support, reducing scope, or raising revenue through existing tiers. If the platform doesn't prove viable, the [shutdown protocol](../about/guarantees.md#shutdown-protocol) guarantees 90 days notice with full export access. See [Platform Economics](/economics) for the full cost structure. | |
| 156 | 156 | <!-- SOP: internal/business/sops/shutdown-notice.md --> | |
| 157 | 157 | ||
| 158 | 158 | ### Is this a full-time operation? |
| @@ -105,7 +105,7 @@ docengine = { path = "../../MNW/shared/docengine" } # From Apps/ | |||
| 105 | 105 | ||
| 106 | 106 | | Project | Features used | Preset | | |
| 107 | 107 | |---------|--------------|--------| | |
| 108 | - | | MNW | `doc-loader`, `directives`, `frontmatter`, `media-urls` | Permissive (docs/blog), Standard (descriptions) | | |
| 108 | + | | MNW | `doc-loader`, `directives`, `frontmatter`, `media-urls`, `assumptions` | Permissive (docs/blog), Standard (descriptions) | | |
| 109 | 109 | | Multithreaded | `mentions`, `quotes` | Strict (forum posts) | | |
| 110 | 110 | | GoingsOn | core only | Standard (notes, descriptions) | | |
| 111 | 111 | | Balanced Breakfast | core only | Sanitize-only (RSS feed content) | |
| @@ -14,8 +14,9 @@ Version: 0.3.1. | |||
| 14 | 14 | ``` | |
| 15 | 15 | src/ | |
| 16 | 16 | lib.rs Crate root. Re-exports public types, quick-start doc example. | |
| 17 | - | client.rs SyncKitClient struct and all HTTP methods (auth, push/pull, | |
| 18 | - | blobs, devices, encryption setup). Retry logic and token | |
| 17 | + | client/ SyncKitClient struct and all HTTP methods, split across | |
| 18 | + | submodules (auth, sync, blob, encryption, rotation, | |
| 19 | + | subscribe, subscription, helpers). Retry logic and token | |
| 19 | 20 | expiry detection live here. | |
| 20 | 21 | crypto.rs Encryption engine. Key derivation (Argon2id), key wrapping | |
| 21 | 22 | (XChaCha20-Poly1305), per-entry encrypt/decrypt, blob |