{"id":21144329,"url":"https://github.com/gilbert/cofound","last_synced_at":"2025-06-25T14:35:20.305Z","repository":{"id":260523732,"uuid":"871393679","full_name":"gilbert/cofound","owner":"gilbert","description":null,"archived":false,"fork":false,"pushed_at":"2025-05-01T22:04:30.000Z","size":292,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-17T22:54:05.701Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gilbert.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-10-11T21:50:44.000Z","updated_at":"2025-05-01T22:04:34.000Z","dependencies_parsed_at":"2025-04-08T02:32:36.612Z","dependency_job_id":"8c3b7e2f-685a-492f-9f08-6f9c87203be4","html_url":"https://github.com/gilbert/cofound","commit_stats":null,"previous_names":["gilbert/cofound"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gilbert/cofound","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilbert%2Fcofound","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilbert%2Fcofound/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilbert%2Fcofound/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilbert%2Fcofound/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gilbert","download_url":"https://codeload.github.com/gilbert/cofound/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilbert%2Fcofound/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261892331,"owners_count":23225908,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-20T08:16:55.863Z","updated_at":"2025-06-25T14:35:20.270Z","avatar_url":"https://github.com/gilbert.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cofound – The AI-friendly Fullstack Framework\n\nCofound is a modern, opinionated TypeScript web framework for Sin. Its main goal is to keep your code as maintainable as possible, while being trivially scalable for medium-scale apps, which cover nearly all applications on the web.\n\nCofound provides built-in support for:\n\n- Pre (static sites) and server-side rendering\n- Session \u0026 Passkey auth\n- SQLite query models and schema management\n- Simple RPCs for frontend-backend interactions\n\n## Quick Start\n\nYou can cofound a new project using the `cofound-create` command:\n\n```bash\nnpx cofound-create myapp\n```\n\n## Project Structure\n\n![Architecture Diagram](https://github.com/user-attachments/assets/6e132367-0e7d-43b2-93be-7149e2145490)\n\nExample walkthrough:\n\n1. Browser makes a remote call using our rpc client\n   - Example: [public_rpc_loginWithPasskey call](https://github.com/snowball-tools/web/blob/85c604971c1af11d66192cceec4b21053e0c4cc3/src/pages/auth/Login.tsx#L33)\n   - Side note: All RPCs require auth unless prefixed with `public_`\n2. RPC layer [validates inputs](https://github.com/snowball-tools/web/blob/85c604971c1af11d66192cceec4b21053e0c4cc3/%2B/rpcs/user-auth.ts#L89-L102) and [calls an action method](https://github.com/snowball-tools/web/blob/main/%2B/rpcs/user-auth.ts#L104-L107)\n   - Note this must be exported by [the rpc index file](https://github.com/snowball-tools/web/blob/85c604971c1af11d66192cceec4b21053e0c4cc3/%2B/rpcs/index.ts#L2) or it won't be available to call\n3. The [action method](https://github.com/snowball-tools/web/blob/main/%2B/actions/auth/LoginUser.ts#L24) calls as many model methods as it needs to accomplish its task, always returning a result – whether an [error result](https://github.com/snowball-tools/web/blob/85c604971c1af11d66192cceec4b21053e0c4cc3/%2B/actions/auth/LoginUser.ts#L33) or an [ok result](https://github.com/snowball-tools/web/blob/85c604971c1af11d66192cceec4b21053e0c4cc3/%2B/actions/auth/LoginUser.ts#L58).\n   - The action in this example [creates a user session](https://github.com/snowball-tools/web/blob/85c604971c1af11d66192cceec4b21053e0c4cc3/%2B/actions/auth/LoginUser.ts#L57), so it doesn't return any data in its ok result.\n\nActions and models are easily testable (see [tests/actions](./test/actions) and [tests/actions](./test/models)).\n\nRead more about each layer in their respective READMEs:\n\n- [RPC Layer](./create/template/docs/backend/rpcs.md)\n- [Action Layer](./create/template/docs/backend/actions.md)\n- [Model Layer](./create/template/docs/backend/models.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgilbert%2Fcofound","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgilbert%2Fcofound","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgilbert%2Fcofound/lists"}