PageSourceSearch

https://staging-dev-portal.netlify.app/assets/js/241e1015.679e509e.js

js staging-dev-portal.netlify.app collected 2026-10-03 11:30:09 UTC 29,776 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkcardano_developer_portal=globalThis.webpackChunkcardano_developer_portal||[]).push([[21790],{56396(e,n,o){o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"contribute/portal-contribute","title":"How to contribute to the developer portal","description":"How to contribute to the Cardano developer portal.","source":"@site/docs/contribute/portal-contribute.md","sourceDirName":"contribute","slug":"/contribute/portal-contribute","permalink":"/docs/contribute/portal-contribute","draft":false,"unlisted":false,"editUrl":"https://github.com/cardano-foundation/developer-portal/edit/staging/docs/contribute/portal-contribute.md","tags":[],"version":"current","lastUpdatedBy":"bora","lastUpdatedAt":1787576928000,"frontMatter":{"id":"portal-contribute","title":"How to contribute to the developer portal","sidebar_label":"How to contribute","description":"How to contribute to the Cardano developer portal."},"sidebar":"operatorsSidebar","previous":{"title":"Mithril","permalink":"/docs/operators/operator-tools/mithril"},"next":{"title":"Style Guide","permalink":"/docs/contribute/portal-style-guide"}}');var i=o(74848),s=o(28453);const r={id:"portal-contribute",title:"How to contribute to the developer portal",sidebar_label:"How to contribute",description:"How to contribute to the Cardano developer portal."},a=void 0,l={},d=[{value:"Why Contribute?",id:"why-contribute",level:2},{value:"Build Your Resume",id:"build-your-resume",level:3},{value:"Build Your Reputation",id:"build-your-reputation",level:3},{value:"Build Your Confidence",id:"build-your-confidence",level:3},{value:"Quick Contributions",id:"quick-contributions",level:2},{value:"Add Your Tool",id:"add-your-tool",level:2},{value:"General Submitter Requirements",id:"general-submitter-requirements",level:3},{value:"Add to Builder Tools",id:"add-to-builder-tools",level:3},{value:"How the data & node categories relate",id:"how-the-data--node-categories-relate",level:3},{value:"Curation and removal",id:"curation-and-removal",level:3},{value:"Maintainer picks",id:"maintainer-picks",level:3},{value:"FAQ",id:"faq",level:3},{value:"Add a dApp Template or Contract",id:"add-a-dapp-template-or-contract",level:2},{value:"Contributing Documentation",id:"contributing-documentation",level:2},{value:"Local Development Setup",id:"local-development-setup",level:3},{value:"Project Structure",id:"project-structure",level:3},{value:"Writing Content",id:"writing-content",level:3},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"More Ways to Contribute",id:"more-ways-to-contribute",level:2},{value:"Improve Text Content",id:"improve-text-content",level:3},{value:"Create Graphics",id:"create-graphics",level:3},{value:"Blog Contributions",id:"blog-contributions",level:3},{value:"Review Pull Requests",id:"review-pull-requests",level:3},{value:"Getting Help",id:"getting-help",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"We wanted to build a developer portal as open and inclusive as Cardano - a portal in the hands of the Cardano community that can be constantly evolved by it."}),"\n",(0,i.jsx)(n.h2,{id:"why-contribute",children:"Why Contribute?"}),"\n",(0,i.jsx)(n.h3,{id:"build-your-resume",children:"Build Your Resume"}),"\n",(0,i.jsx)(n.p,{children:"Each contribution you make acts as a precious notch on your belt towards career development or job searches within the Cardano ecosystem. It is also a way for people to find examples of your work and verify your abilities. By contributing to open source projects, you will not only gain a lot of valuable experience, but if your profile reaches a certain level of attention and recognition, you are also more likely to get professional opportunities further down the line."}),"\n",(0,i.jsx)(n.h3,{id:"build-your-reputation",children:"Build Your Reputation"}),"\n",(0,i.jsx)(n.p,{children:"Contributions to the developer portal will give your GitHub name and profile higher visibility as more and more people come across your work online. As visibility increases, so too will the reputation of your name and brand."}),"\n",(0,i.jsx)(n.h3,{id:"build-your-confidence",children:"Build Your Confidence"}),"\n",(0,i.jsx)(n.p,{children:"Creating tutorials and showing fellow community members how to create will not only elevate your knowledge of your own skills and processes, but will also bestow you with greater confidence in your abilities as you interact with others."}),"\n",(0,i.jsx)(n.p,{children:"Since everything is public, people typically pay greater attention to how well something is written or programmed. This will afford you with an invaluable set of eyes on your contributions that will serve as a crucial peer-reviewed tool to catch errors and refine your work."}
1),"\n",(0,i.jsx)(n.h2,{id:"quick-contributions",children:"Quick Contributions"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Fix typos, update links, small edits:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Use GitHub's web editor directly on any file"}),"\n",(0,i.jsx)(n.li,{children:'Click the pencil icon ("Edit this page") at the end of any page'}),"\n",(0,i.jsx)(n.li,{children:"Make your changes and submit a pull request"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Report issues or suggest improvements:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/cardano-foundation/developer-portal/issues",children:"Create an issue"})," - Anything from a simple suggestion to a fully elaborated plan. You can think of it as creating a topic in a forum."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/cardano-foundation/developer-portal/discussions",children:"Start a discussion"})," - Appropriate for finding consensus on fundamental changes"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://forum.cardano.org/c/developers/29",children:"Share on the Cardano Forum"})," - For those who prefer forum discussions"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Spread the word:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Link to the ",(0,i.jsx)(n.a,{href:"https://cardano.org/apps/",children:"Cardano Apps"})," when someone asks about projects built on Cardano"]}),"\n",(0,i.jsxs)(n.li,{children:["Share the ",(0,i.jsx)(n.a,{href:"https://developers.cardano.org/tools",children:"Builder Tools"})," page with developers looking for SDKs and libraries"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"add-your-tool",children:"Add Your Tool"}),"\n",(0,i.jsx)(n.h3,{id:"general-submitter-requirements",children:"General Submitter Requirements"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"For all tool submissions:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Your GitHub account ideally should have some contribution history or be known in the Cardano community"}),"\n",(0,i.jsx)(n.li,{children:"Brand new GitHub accounts may face additional scrutiny"}),"\n",(0,i.jsxs)(n.li,{children:["All submissions must pass ",(0,i.jsx)(n.code,{children:"yarn build"})," without errors before submission"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"add-to-builder-tools",children:"Add to Builder Tools"}),"\n",(0,i.jsx)(n.p,{children:"Builder Tools is a curated directory, not a database. The goal is to keep it as useful as possible for any Cardano developer, which sometimes means maintainers declining a tool that works but isn't the right fit yet. The points below are what maintainers look for, not a checklist you tick to earn a spot."}),"\n",(0,i.jsxs)(n.p,{children:["It's a list of things you build Cardano applications ",(0,i.jsx)(n.em,{children:"with"}),": SDKs and libraries, APIs and providers, indexers and data infrastructure, node and operations tooling, wallets and connectivity, developer environments, and testing tools. End-user applications (wallets as products, dApps, DEXes, marketplaces, games) belong on ",(0,i.jsx)(n.a,{href:"https://cardano.org/apps/",children:"cardano.org/apps"}),", not here."]}),"\n",(0,i.jsx)(n.p,{children:"Mostly it comes down to signal. A tool that's genuinely useful, novel, or has gained real community adoption usually carries enough signal for maintainers to recognize it and say yes. A tool that works but hasn't found meaningful adoption, or isn't yet relied on by larger projects and applications, often hasn't generated that signal. That's not a no forever; things stand the test of time, so keep iterating and traction tends to show."}),"\n",(0,i.jsx)(n.p,{children:"Cardano is a vast sea of open-source repositories that work together, and a directory listing every one-off tool would point developers in every direction at once. So if you've built something niche for a specific workflow, the strongest move is often to contribute it into one of the established repositories already serving that domain, where it reaches more developers and is maintained alongside the rest. A tool built for one specific need, even a quick one-off that does exactly what it claims, isn't always enough on its own."}),"\n",(0,i.jsxs)(n.p,{children:["Open source is encouraged (set ",(0,i.jsx)(n.code,{children:"repository"}),"); hosted and closed services are welcome too (",(0,i.jsx)(n.code,{children:"repository: null"}),")."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"The mechanics"})," \u2014 the exact entry format, field conventions, validation, and PR flow \u2014 live in ",(0,i.jsx)(n.a,{href:"https://github.com/cardano-foundation/developer-portal/blob/staging/CONTRIBUTING.md#adding-a-builder-tool",children:"CONTRIBUTING.md"}),". In short: add your entry to the ",(0,i.jsx)(n.strong,{children:"end"})," of the ",(0,i.jsx)(n.code,{children:"BuilderTools"}
1)," array in ",(0,i.jsx)(n.code,{children:"src/data/builder-tools/tools.js"}),", pick exactly one ",(0,i.jsx)(n.code,{children:"category"})," and the language/interface ",(0,i.jsx)(n.code,{children:"properties"})," from ",(0,i.jsx)(n.code,{children:"tags.js"}),", run ",(0,i.jsx)(n.code,{children:"yarn build"}),' (it validates your entry), and open a pull request with the "Add Builder Tool" template. If your tool reads, serves, or indexes chain data, or runs/talks to a node, the next section helps pick the right category layer.']}),"\n",(0,i.jsx)(n.h3,{id:"how-the-data--node-categories-relate",children:"How the data & node categories relate"}),"\n",(0,i.jsxs)(n.p,{children:["If your tool reads, serves, or indexes chain data, or runs/talks to a node, it sits at one layer of a stack. Pick the layer the tool ",(0,i.jsx)(n.em,{children:"operates at"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsxs)(n.strong,{children:[(0,i.jsx)(n.code,{children:"node"})," (Nodes & Clients)"]})," - the node software itself: run or be a node (a full node, an alternative client implementation, an L2 node)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsxs)(n.strong,{children:[(0,i.jsx)(n.code,{children:"node-access"})," (Node Access & RPC)"]})," - talk to a node: RPC bridges and protocol libraries that expose a node you run."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsxs)(n.strong,{children:[(0,i.jsx)(n.code,{children:"indexer"})," (Indexers & Data)"]})," - self-host a queryable store: ingest chain data and serve it back (full indexers, lightweight indexes, data nodes, streaming pipelines)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsxs)(n.strong,{children:[(0,i.jsx)(n.code,{children:"api"})," (APIs & Providers)"]})," - hosted: a managed endpoint you call, with no infrastructure to run."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"sdk"})," (SDKs & Libraries) sits across the top: a library that wraps the ",(0,i.jsx)(n.code,{children:"node-access"})," / ",(0,i.jsx)(n.code,{children:"indexer"})," / ",(0,i.jsx)(n.code,{children:"api"})," layers so you build from code."]}),"\n",(0,i.jsxs)(n.p,{children:["Rules of thumb: do you call a hosted endpoint (",(0,i.jsx)(n.code,{children:"api"}),") or run it yourself (",(0,i.jsx)(n.code,{children:"indexer"}),")? Does the tool build its own queryable data store (",(0,i.jsx)(n.code,{children:"indexer"}),") or just relay the node's protocol (",(0,i.jsx)(n.code,{children:"node-access"}),")? Is it the node itself (",(0,i.jsx)(n.code,{children:"node"}),") or something that talks to one (",(0,i.jsx)(n.code,{children:"node-access"}),")?"]}),"\n",(0,i.jsx)(n.h3,{id:"curation-and-removal",children:"Curation and removal"}),"\n",(0,i.jsx)(n.p,{children:"The list is curated and pruned, not append-only, so it stays useful over time. Maintainers remove a tool when it stops serving developers. What usually prompts that:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"the website is down, or the source repository is archived or unreachable,"}),"\n",(0,i.jsx)(n.li,{children:"a long stretch (roughly two years or more) with no commits, releases, or community activity and no sign of life,"}),"\n",(0,i.jsx)(n.li,{children:"it's been superseded by a better-maintained tool for the same job,"}),"\n",(0,i.jsx)(n.li,{children:"a hosted service that's been discontinued,"}),"\n",(0,i.jsxs)(n.li,{children:["an end-user application that belongs on ",(0,i.jsx)(n.a,{href:"https://cardano.org/apps/",children:"cardano.org/apps"}),","]}),"\n",(0,i.jsx)(n.li,{children:"or it no longer meets a basic quality and trust bar."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"These are signals, not a scorecard. Maintainers weigh them with judgment and often talk through borderline cases. A removed tool can come back any time through the normal submission, which is also a good moment to refresh its information; a past listing isn't a fast-track."}),"\n",(0,i.jsx)(n.h3,{id:"maintainer-picks",children:"Maintainer picks"}),"\n",(0,i.jsx)(n.p,{children:"A few tools carry a maintainer pick (the star): a steer toward what a developer should reach for in a given area today. It's a curated call, not a popularity contest."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"It leans on signals (registry downloads, recent activity, maintenance, real-world fit) weighed with 
1judgment. Stars alone mislead; a legacy tool often out-stars its maintained successor."}),"\n",(0,i.jsx)(n.li,{children:"Roughly one clear leader per category, a couple more where it's genuinely warranted, and none where nothing stands out."}),"\n",(0,i.jsxs)(n.li,{children:["Maintainers choose the picks, so don't set ",(0,i.jsx)(n.code,{children:"maintainerPick"})," on your own submission."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"If you think something deserves a pick, open an issue and make the case: which category it leads, and why."}),"\n",(0,i.jsx)(n.h3,{id:"faq",children:"FAQ"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["Q: I don't know how to use GitHub or run ",(0,i.jsx)(n.code,{children:"yarn build"}),". Can I still contribute?"]})}),"\n",(0,i.jsx)(n.p,{children:"A: Yes! You can:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/cardano-foundation/developer-portal/issues",children:"Open an issue"})," with your tool details and someone from the community can help"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/cardano-foundation/developer-portal/discussions",children:"Start a discussion"})," to get guidance"]}),"\n",(0,i.jsxs)(n.li,{children:["Let the community know about your contribution idea in ",(0,i.jsx)(n.a,{href:"https://forum.cardano.org/c/developers/cardano-projects/151",children:"the forum"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Q: How long does it take for my tool to be approved?"})}),"\n",(0,i.jsxs)(n.p,{children:["A: Pull requests require ",(0,i.jsx)(n.strong,{children:"3 reviewer approvals"}),". This typically takes a few days to a week, depending on reviewer availability. After approval, changes are merged to the ",(0,i.jsx)(n.strong,{children:"staging branch"})," first (visible at ",(0,i.jsx)(n.a,{href:"https://staging-dev-portal.netlify.app",children:"staging-dev-portal.netlify.app"}),"), then later pushed to production. This process causes a small delay between staging and production deployment."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Q: Can I update my tool information later?"})}),"\n",(0,i.jsx)(n.p,{children:"A: Yes! Submit a new pull request with the updates to your tool entry."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Q: Why was my tool rejected?"})}),"\n",(0,i.jsx)(n.p,{children:"A: Common reasons for rejection include:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Domain issues"})," - Using temporary hosting domains, URL shorteners, or unstable domains"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"New GitHub account"})," - Submitter account lacks contribution history or community recognition"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Incomplete submission"})," - Missing required fields, broken links, or build errors"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Marketing-focused description"}),' - Using claims like "the best," "the first," or "the only"']}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Out of scope, or not enough signal yet"})," - an end-user app (belongs on cardano.org/apps), or a tool that works but hasn't yet found the adoption that earns a spot. This isn't a permanent no; tools can earn a place as they gain traction."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"If your submission was rejected, reviewers will typically provide specific feedback in the pull request comments."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Q: Should I commit yarn.lock changes?"})}),"\n",(0,i.jsxs)(n.p,{children:["A: No, never commit ",(0,i.jsx)(n.code,{children:"yarn.lock"})," changes. This file is managed by maintainers. If some slipped into your branch, the ",(0,i.jsx)(n.a,{href:"https://github.com/cardano-foundation/developer-portal/blob/staging/CONTRIBUTING.md#faq",children:"CONTRIBUTING FAQ"})," has the exact commands to revert them."]}),"\n",(0,i.jsxs)(n.p,{children:["For more details on the GitHub workflow, see ",(0,i.jsx)(n.a,{href:"https://github.com/cardano-foundation/developer-portal/blob/staging/CONTRIBUTING.md",children:"CONTRIBUTING.md"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"add-a-dapp-template-or-contract",children:"Add a dApp Template or Contract"}),"\n",(0,i.jsxs)(n.p,{children:["Two more curated surfaces live under ",(0,i.jsx)(n.a,{href:"https://developers.cardano.org/templates",children:"/templates"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"App starters"})," are runnable front-end dApp projects you scaffold in one command. To add one, follow ",(0,i.jsx)(n.a,{href:"https://github.com/cardano-foundation/developer-portal/blob/staging/examples/templates/README.md",children:(0,i.jsx)(n.code,{children:"examples/templates/README.md"})}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"The contract library"})," is a use-case index (escrow, vesting, HTLC...) that links out to on-chain and off-chain implementations. To add an entry, follow ",(0,i.jsx)(n.a,{href:"https://github.com/cardano-foundation/developer-portal/blob/staging/src/data/contracts/README.md",children:(0,i.jsx)(n.code,{children:"src/data/contracts/README.md"})}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Both are curated like Builder Tools: canonical and maintained, pointing at the established source rather than forking code into the portal. Each entry is validated by ",(0,i.jsx)(n.code,{children:"yarn build"}),", and the same submitter requirements and review process above apply."]}),"\n",(0,i.jsx)(n.h2,{id:"contributing-documentation",children:"Contributing Documentation"}),"\n",(0,i.jsxs)(n.p,{children:["For ",(0,i.jsx)(n.strong,{children:"content writers and developers"})," who want to work on documentation, blog posts, or improve existing content."]}),"\n",(0,i.jsx)(n.h3,{id:"local-development-setup",children:"Local Development Setup"}),"\n",(0,i.jsxs)(n.p,{children:["Follow the ",(0,i.jsx)(n.a,{href:"https://github.com/cardano-foundation/developer-portal/blob/staging/README.md#local-development-setup",children:"local development setup"})," in the README: fork, clone, ",(0,i.jsx)(n.code,{children:"yarn install"}),", ",(0,i.jsx)(n.code,{children:"yarn build"}),", ",(0,i.jsx)(n.code,{children:"yarn start"}),". It requires Node.js 22 (the pinned version lives in ",(0,i.jsx)(n.code,{children:".nvmrc"}),", so ",(0,i.jsx)(n.code,{children:"nvm use"})," picks it up) and Yarn 1.20+."]}),"\n",(0,i.jsx)(n.admonition,{title:"Development vs Production",type:"info",children:(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"yarn start"})," - Fast development with some limitations (blurry images, search issues)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"yarn build"})," - Full production build required before submitting PRs"]}),"\n"]})}),"\n",(0,i.jsxs)(n.p,{children:["Both commands first run two generators: ",(0,i.jsx)(n.code,{children:"scripts/generate-stats.js"})," (writes ",(0,i.jsx)(n.code,{children:"static/stats.json"}),") and ",(0,i.jsx)(n.code,{children:"scripts/generate-og.js"})," (renders the social-preview cards). Their output is gitignored - never commit it."]}),"\n",(0,i.jsx)(n.h3,{id:"project-structure",children:"Project Structure"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"developer-portal/\n\u251c\u2500\u2500 docs/              # Documentation content (images co-located in img/ folders)\n\u251c\u2500\u2500 blog/              # Developer blog posts (tags.yml defines allowed tags)\n\u251c\u2500\u2500 examples/          # Runnable example projects (dApp starter templates)\n\u251c\u2500\u2500 src/data/          # Site data: builder-tools, templates, contracts, navbar, footer, redirects\n\u251c\u2500\u2500 static/img/        # Site-owned assets, grouped by consumer (home, blog, tools, brand, og)\n\u251c\u2500\u2500 plugins/           # Custom Docusaurus plugins\n\u251c\u2500\u2500 scripts/           # Build helpers (stats, social cards, llms.txt paths)\n\u251c\u2500\u2500 sidebars.js        # Navigation structure (hand-authored)\n\u2514\u2500\u2500 docusaurus.config.js\n"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Key locations:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"/docs/"})," - All documentation content"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"/src/data/builder
1-tools/tools.js"})," - Developer tools data"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"/sidebars.js"})," - Controls documentation navigation"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"writing-content",children:"Writing Content"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Formatting:"})," See ",(0,i.jsx)(n.a,{href:"/docs/contribute/portal-style-guide",children:"Style Guide"})," for Markdown syntax and Docusaurus components."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Essential rules:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Pages are ",(0,i.jsx)(n.code,{children:".md"})," files - Docusaurus components (Tabs, DocCardList) work inside ",(0,i.jsx)(n.code,{children:".md"}),", so never create ",(0,i.jsx)(n.code,{children:".mdx"})]}),"\n",(0,i.jsxs)(n.li,{children:["A new page needs a manual entry in ",(0,i.jsx)(n.code,{children:"sidebars.js"}),"; navigation is hand-authored (no ",(0,i.jsx)(n.code,{children:"_category_.json"})," files)"]}),"\n",(0,i.jsxs)(n.li,{children:["Doc images live next to the page in an ",(0,i.jsx)(n.code,{children:"img/"})," folder, referenced relatively (",(0,i.jsx)(n.code,{children:"./img/name.png"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"## Level 2"})," headings as top-level (page title is auto-generated)"]}),"\n",(0,i.jsxs)(n.li,{children:["Include frontmatter with ",(0,i.jsx)(n.code,{children:"id"}),", ",(0,i.jsx)(n.code,{children:"title"}),", ",(0,i.jsx)(n.code,{children:"description"})]}),"\n",(0,i.jsxs)(n.li,{children:["Test with ",(0,i.jsx)(n.code,{children:"yarn build"})," before submitting"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Node.js version error:"})," ",(0,i.jsx)(n.code,{children:"[ERROR] Minimum Node.js version not met"}),"\n",(0,i.jsx)(n.strong,{children:"Solution:"})," Use Node.js 22. With nvm installed, ",(0,i.jsx)(n.code,{children:"nvm use"})," in the repo root switches to the version pinned in ",(0,i.jsx)(n.code,{children:".nvmrc"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"more-ways-to-contribute",children:"More Ways to Contribute"}),"\n",(0,i.jsx)(n.h3,{id:"improve-text-content",children:"Improve Text Content"}),"\n",(0,i.jsx)(n.p,{children:"Fix typos and improve texts, especially if you are a native speaker and have strong writing skills."}),"\n",(0,i.jsx)(n.h3,{id:"create-graphics",children:"Create Graphics"}),"\n",(0,i.jsx)(n.p,{children:"If you are a talented graphic designer, you can improve various charts and diagrams. We should always use graphics that work well in both light mode and dark mode for the portal. You can also make one graphic for each."}),"\n",(0,i.jsx)(n.h3,{id:"blog-contributions",children:"Blog Contributions"}),"\n",(0,i.jsx)(n.p,{children:"When contributing blog posts, please follow these guidelines:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Tag naming conventions:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use lowercase tags only (e.g., ",(0,i.jsx)(n.code,{children:"ai"}),", ",(0,i.jsx)(n.code,{children:"defi"}),", ",(0,i.jsx)(n.code,{children:"dex"}),", ",(0,i.jsx)(n.code,{children:"dao"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Tags must be defined in ",(0,i.jsx)(n.code,{children:"blog/tags.yml"})," before use"]}),"\n",(0,i.jsxs)(n.li,{children:["Check existing tags in ",(0,i.jsx)(n.code,{children:"blog/tags.yml"})," before adding new ones"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Truncation markers:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Most blog posts should include ",(0,i.jsx)(n.code,{children:"\x3c!-- truncate --\x3e"})," markers for better previews"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Exception:"})," Posts tagged with ",(0,i.jsx)(n.code,{children:"media"})," (short video content) should NOT include truncation markers to preserve video visibility in blog listings"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Social cards:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"The preview image shown when a post is shared on social media is generated at build time from the post title. You do not need to make one."}),"\n",(0,i.jsxs)(n.li,{children:["Do not add an ",(0,i.jsx)(n.code,{children:"image:"})," field to the frontmatter. Every post gets a generated card, so the field is ignored."]}),"\n",(0,i.jsxs)(n.li,{children:["The same applies to documentation pages: ",(0,i.jsx)(n.code,{children:"scripts/generate-og.js"})," renders a branded card for every doc and site page during the build."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"review-pull-requests",children:"Review Pull Requests"}
1),"\n",(0,i.jsx)(n.p,{children:"If you have excellent technical understanding and mistakes catch your eye, you can review pull requests. You should have made contributions before and have a GitHub account with some reputation. If you are unsure about if you are a good fit, participating in the active discussions that take place in developer portal github issues/pull requests is always a good place to start to have your name visible."}),"\n",(0,i.jsx)(n.h2,{id:"getting-help",children:"Getting Help"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Technical issues:"})," ",(0,i.jsx)(n.a,{href:"https://github.com/cardano-foundation/developer-portal/issues",children:"GitHub Issues"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Content questions:"})," ",(0,i.jsx)(n.a,{href:"https://github.com/cardano-foundation/developer-portal/discussions",children:"GitHub Discussions"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Developer community:"})," ",(0,i.jsx)(n.a,{href:"https://forum.cardano.org/c/developers/29",children:"Cardano Forum"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Connect with developers:"})," ",(0,i.jsx)(n.a,{href:"/docs/community/cardano-developer-community",children:"Developer community overview"})]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453(e,n,o){o.d(n,{R:()=>r,x:()=>a});var t=o(96540);const i={},s=t.createContext(i);function r(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.