From 23bda3b6351c4791f4e6878f3d19adfbb8c83ac1 Mon Sep 17 00:00:00 2001 From: juancguerrerodev Date: Sat, 3 Oct 2026 12:21:31 -0600 Subject: [PATCH] README: Dojo Coding banner, badges and footer Light and dark banner generated with dojo-readme-kit, the README frame shared by every Dojo Coding open-source repo (name, summary, badges in the Dojo palette, link row) and a footer with the Dojo Coding mark. --- README.md | 24 ++++++++++++++++++++++++ docs/assets/README.md | 9 +++++++++ docs/assets/banner-dark.svg | 1 + docs/assets/banner-light.svg | 1 + docs/assets/banner.toml | 12 ++++++++++++ docs/assets/dojocoding-mark.png | Bin 0 -> 15370 bytes 6 files changed, 47 insertions(+) create mode 100644 docs/assets/README.md create mode 100644 docs/assets/banner-dark.svg create mode 100644 docs/assets/banner-light.svg create mode 100644 docs/assets/banner.toml create mode 100644 docs/assets/dojocoding-mark.png diff --git a/README.md b/README.md index 772924d..635c1a2 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,25 @@ +

+ + + + + OpenCode SRD Framework by Dojo Coding: Build backwards from success + + +

+ # OpenCode SRD Framework +**The SRD methodology for OpenCode, installed with one npm command, for builders who want to know what to build next.** + Synthetic Reality Development (SRD) for OpenCode. This package installs global commands, agents, and skills, and registers an npm-loaded OpenCode plugin that nudges teams back toward revenue-critical work after edits. This package is the OpenCode-compatible npm distribution of the upstream SRD framework in [`DojoCodingLabs/srd-framework`](https://github.com/DojoCodingLabs/srd-framework). The upstream project targets Claude Code's plugin marketplace flow, while this repo repackages the same SRD methodology and assets for OpenCode and npm-based installation. +[![npm version](https://img.shields.io/npm/v/@dojocoding/opencode-srd-framework?color=FF7151&labelColor=201E3D)](https://www.npmjs.com/package/@dojocoding/opencode-srd-framework) [![License MIT](https://img.shields.io/badge/license-MIT-FF7151?labelColor=201E3D)](LICENSE) ![OpenCode plugin](https://img.shields.io/badge/OpenCode-plugin-201E3D?labelColor=201E3D) + +[Get started](#install) · [Commands](#available-commands) · [Compatibility](#compatibility-notes) · [Migrating from Claude Code](docs/migration-from-claude-code.md) · [Report an issue](https://github.com/DojoCodingLabs/opencode-srd-framework/issues/new) + ## What SRD Is SRD is a backwards-from-success product workflow: @@ -120,3 +136,11 @@ More detail: - `docs/migration-from-claude-code.md` - `docs/compatibility.md` - `docs/release.md` + +## License + +[MIT](LICENSE). Built by [Dojo Coding](https://dojocoding.io). + +

+ Dojo Coding +

diff --git a/docs/assets/README.md b/docs/assets/README.md new file mode 100644 index 0000000..fdb53a2 --- /dev/null +++ b/docs/assets/README.md @@ -0,0 +1,9 @@ +# Banner + +`banner-light.svg` and `banner-dark.svg` are generated from `banner.toml` with +[dojo-readme-kit](https://github.com/DojoCodingLabs/.github/tree/main/kit), in the +[dojocoding.io](https://dojocoding.io) visual system. To change the banner, edit `banner.toml` and run: + + uvx --from "git+https://github.com/DojoCodingLabs/.github#subdirectory=kit" dojo-banner docs/assets/banner.toml + +`dojocoding-mark.png` is the official Dojo Coding mark, used in the README footer. diff --git a/docs/assets/banner-dark.svg b/docs/assets/banner-dark.svg new file mode 100644 index 0000000..eeb2385 --- /dev/null +++ b/docs/assets/banner-dark.svg @@ -0,0 +1 @@ +OpenCode SRD Framework by Dojo Coding: Build backwards from success diff --git a/docs/assets/banner-light.svg b/docs/assets/banner-light.svg new file mode 100644 index 0000000..30d910f --- /dev/null +++ b/docs/assets/banner-light.svg @@ -0,0 +1 @@ +OpenCode SRD Framework by Dojo Coding: Build backwards from success diff --git a/docs/assets/banner.toml b/docs/assets/banner.toml new file mode 100644 index 0000000..d9f8c9b --- /dev/null +++ b/docs/assets/banner.toml @@ -0,0 +1,12 @@ +name = "OpenCode SRD Framework" +tagline = "Build [backwards] from success" +chips = ["3 commands / 3 agents"] +meta = "Open source · OpenCode" +tile = "/" + +[card] +kind = "terminal" +label = "OpenCode" +status = "v0.1.1 · MIT" +lines = ["opencode-srd-framework install", "/srd-quick", ["/srd-generate", "docs/prd.md"]] +dim = "personas · journeys · gap audit" diff --git a/docs/assets/dojocoding-mark.png b/docs/assets/dojocoding-mark.png new file mode 100644 index 0000000000000000000000000000000000000000..02e9446b333dd45c7592880ed16bfa8b5d70ca70 GIT binary patch literal 15370 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 ozxTv2cW?39r|xUh^