Start here before exploring the repo in depth.
This is a pnpm workspace + Turborepo monorepo for several separately deployed
Next.js apps that are stitched together behind solana.com with rewrites and
asset prefixes.
Most apps are not standalone product islands. They share:
@workspace/i18nfor locale config and routing helpers@workspace/uifor reusable UI primitives@solana-com/ui-chromefor shared header, footer, cross-app links, alerts, and Inkeep integrations- Turborepo tasks defined in the root
package.jsonandturbo.json
Pick the app first. That usually cuts exploration time in half.
| Area | Workspace | Local Port | Key Route Prefixes |
|---|---|---|---|
| Main marketing site | apps/web / solana-com |
3000 |
/, /solutions, /developers, /ecosystem, /events, /news |
| Developer docs | apps/docs / solana-docs |
3003 |
/docs, /developers/cookbook, /developers/guides |
| Media/blog | apps/media / solana-com-media |
3002 |
/news, /podcasts, /keystatic |
| Templates showcase | apps/templates / solana-templates |
3001 |
/developers/templates via rewrites |
| Accelerate event site | apps/accelerate / solana-com-accelerate |
3004 |
/accelerate via rewrites |
| Breakpoint event site | apps/breakpoint / solana-com-breakpoint |
3005 |
/breakpoint via rewrites |
apps/web: mainsolana.comapp, large surface area, mix of marketing, ecosystem, events, news aggregation, and developer entry pointsapps/docs: Fumadocs-based developer docs with MDX content undercontent/apps/media: Keystatic-backed news and podcast site with content incontent/apps/templates: templates browser that fetches metadata from GitHubapps/accelerate: event microsite with its own asset prefix and route rewritesapps/breakpoint: event microsite with its own asset prefix and route rewrites
packages/i18n: locale list, routing helpers, shared message loadingpackages/ui: reusable UI primitivespackages/ui-chrome: shared nav/footer/theme/cross-app link behaviorpackages/ecosystem-data: canonical company and logo registry used by appspackages/sentry: shared Sentry helperspackages/config-eslint,packages/config-typescript: shared configs
From repo root:
pnpm install
pnpm dev
pnpm dev:web
pnpm dev:media
pnpm dev:acc
pnpm --filter solana-docs dev
pnpm --filter solana-templates dev
pnpm --filter solana-com-breakpoint dev
pnpm lint
pnpm test
pnpm --filter <workspace> lint
pnpm --filter <workspace> check-types
pnpm --filter <workspace> testPeriodic agent-doc refresh:
node skills/refresh-agent-context/scripts/workspace_inventory.mjsUseful filters:
solana-comsolana-docssolana-com-mediasolana-templatessolana-com-acceleratesolana-com-breakpoint
- Root scripts call
turbo run ... builddepends on ancestorbuildtasks and reads.env*devis uncached and persistenttesthas no cached outputs- Shared env pass-through is declared in
turbo.json
When a change needs validation, prefer targeted workspace commands before running the whole repo.
If repo structure changed and the onboarding docs may be stale, use the
refresh-agent-context skill in skills/refresh-agent-context/.
- Non-web apps set
NEXT_PUBLIC_APP_NAMEinnext.config.ts @solana-com/ui-chrome/url-configuses that value to decide whether a link should use Next client navigation or a full page load across app boundaries- Several apps use
assetPrefixplus rewrites so they can live behindsolana.comwithout breaking static assets
If you touch navigation, shared header/footer behavior, or route ownership,
inspect packages/ui-chrome and the target app next.config.ts together.
apps/docs/content: source of truth for docs, cookbook, and guidesapps/media/content: source of truth for posts, podcasts, authors, tags, and global CMS contentpackages/i18n/messages/*: shared UI message catalogs by apppackages/ecosystem-data: shared company metadata and logos, not app-specific marketing copy
Some apps use OpenSpec instructions. If a request is about a proposal, major new
capability, architecture shift, or ambiguous scoped change, read the app-local
openspec/AGENTS.md before implementing.
Current app-level OpenSpec entry points:
apps/web/openspec/AGENTS.mdapps/accelerate/openspec/AGENTS.mdapps/breakpoint/openspec/apps/media/openspec/
After reading this file:
- open the target app's
AGENTS.mdif it exists - then open that app's
package.json - then inspect
next.config.ts
That usually gives enough context to make a safe first edit.