You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
chore: unblock CI lint, add MIT LICENSE, humanize README copy
- Fix biome formatter complaints across 6 web files (long string
joins, one-line JSX, array inlining) so `pnpm lint` is green.
- Suppress biome's noDangerouslySetInnerHtml on the JSON-LD <script>
in root layout with a justified biome-ignore: the payload is a
static object we control and every '<' is escaped to '\u003c', so
no tag can close the script tag early.
- Add MIT LICENSE at repo root covering the whole repository.
- Update the README license badge + section to reflect plain MIT
everywhere; drop the old "packages-only MIT, rest source-available"
hedge now that the project is fully open-source.
- Tighten README copy in TL;DR, the self-host note, "why star this",
and the license blurb — fewer throat-clearings, more contractions,
stronger hooks.
> The landing site at **[sheetforge.dev](https://sheetforge.dev)** is live, but the backend is **not yet hosted**. To use sheetforge today, clone the repo and run the full stack locally — `pnpm dev` boots the Next.js dashboard, Hono API, and the queue worker on your own machine. A managed/hosted SaaS is on the roadmap; the MIT-licensed OSS core (`packages/queue`, `packages/codegen`, `packages/sdk-ts`) will stay free forever. See the [self-host quickstart](#quickstart) below.
35
35
36
-
> **TL;DR.** The Google Sheets API drops rows under concurrent writes. Every "Sheets as a backend" wrapper you have tried (SheetDB, Sheety, NoCodeAPI) forwards your POST straight to `values.append` and inherits the bug. **sheetforge** wraps every write in a per-sheet queue fenced by a Postgres advisory lock. 50 parallel POSTs → 50 ordered rows, retry-safe by key. And because the sheet's header row is the schema, it generates a typed TypeScript SDK you commit to your repo.
36
+
> **TL;DR.** The Google Sheets API drops rows under concurrent writes. Every "Sheets as a backend" wrapper (SheetDB, Sheety, NoCodeAPI) forwards your POST straight to `values.append` and inherits the bug. **sheetforge** wraps every write in a per-sheet queue fenced by a Postgres advisory lock: 50 parallel writes, 50 ordered rows, retry-safe by key. And because your header row is the schema, you get a typed TypeScript SDK you can commit alongside the call sites.
37
37
38
38
## The problem
39
39
@@ -87,9 +87,9 @@ await Promise.all([
87
87
| Hosted SaaS (sign up, skip local infra) | ⏳ planned after V1 stabilizes |
**What this means for you.**If you land on the marketing site today and hit "Sign in", that flow only works against an API *you* run — the hosted endpoint isn't up yet. To try the product, clone this repo, follow the [quickstart](#quickstart), and the dashboard at `http://localhost:3000` gives you the whole experience (OAuth, sheet connect, typed SDK download).
90
+
**What this means for you.**The "Sign in" button on [sheetforge.dev](https://sheetforge.dev) points at an API *you* run — there's no hosted endpoint yet. Clone the repo, follow the [quickstart](#quickstart), and `http://localhost:3000` gives you the full flow: OAuth, sheet connect, typed SDK download.
91
91
92
-
I'll update this section the moment the hosted API is live. Star the repo to get notified.
92
+
I'll flip this section the moment the hosted API is live. Star the repo if you want the ping.
93
93
94
94
## Quickstart
95
95
@@ -337,7 +337,7 @@ See the `good-first-queue-hack` and `sdk-codegen` labels if you want to help pul
337
337
338
338
## Why star this
339
339
340
-
Most "Sheets as a backend" tools wrap a broken primitive. sheetforge fixes the primitive and hands you a typed client on the way out. If you have ever shipped a form on Sheets and watched rows go missing during a launch, starring this is the cheapest vote for correctness I can ask for.
340
+
Most "Sheets as a backend" tools wrap a broken primitive. sheetforge fixes the primitive, then hands you a typed client on the way out. If you've ever shipped a form on Sheets and watched rows vanish mid-launch, a star is the cheapest vote for correctness you can cast.
341
341
342
342
## Contributing
343
343
@@ -361,7 +361,7 @@ Issues and discussions are open. I answer them.
361
361
362
362
## License
363
363
364
-
`packages/queue`, `packages/codegen`, and `packages/sdk-ts` are **MIT** once the V0 concurrency acceptance demo passes. The apps and slices are **source-available** (all-rights-reserved pre-launch, source-available after). See [`LICENSE`](./LICENSE) once it lands.
364
+
[MIT](./LICENSE). Clone, fork, self-host, ship — no strings. When the hosted SaaS lands it'll run on the same MIT core; the managed service is the product, the code stays free.
@@ -214,6 +210,7 @@ export default function RootLayout({
214
210
<head>
215
211
<script
216
212
type="application/ld+json"
213
+
// biome-ignore lint/security/noDangerouslySetInnerHtml: JSON-LD is a static object we control, and `<` is escaped to `\u003c` so no tag can close the <script> early.
0 commit comments