brewfolio
v0.1.21
Published
CMS-driven design system for Astro — tokens, components, layouts, and a Keystatic schema for portfolios and apps.
Downloads
299
Maintainers
Readme
brewfolio
The shared Astro package behind my portfolio at eeshans.com, turned into a reusable theme system for portfolios and apps.
Scaffold a site • Source repo • Live portfolio
Why this package exists
I spent a lot of time building my own portfolio design in Astro: the dashboard
shell, modal reading flow, notebook rendering, project drawer, GitHub pane, and
Keystatic editing model. brewfolio packages that work into a reusable runtime
so I can reuse it across my own projects and make it available for other people
to build on.
This package is the shared runtime. If you want the easiest path, use
create-brewfolio.
npx create-brewfolioWhat ships in the package
brewfolio currently supports two layouts:
DashboardLayoutfor portfolio sitesAppLayoutfor tools, dashboards, and landing pages
It also ships:
- shared header and footer
- modal shell and modal runtime
- notebook loading and rendering helpers
- GitHub helpers
- shared design tokens
- shared Keystatic schema primitives
Install manually
If you want to wire the package into your own Astro app directly:
npm install brewfolio @keystatic/core @keystatic/astro @astrojs/react react react-dom tailwindcss @tailwindcss/vite --legacy-peer-depsUse it
Re-export the schema
import { config } from '@keystatic/core'
import { collections, singletons } from 'brewfolio/keystatic.config'
export default config({
storage: { kind: 'local' },
collections,
singletons,
})Use a layout
---
import DashboardLayout from 'brewfolio/layouts/DashboardLayout.astro'
---
<DashboardLayout meta={{ title: 'My portfolio' }}>
{/* your page */}
</DashboardLayout>Import the tokens
@import 'tailwindcss';
@source '../../node_modules/brewfolio/src/**/*.{astro,ts,js,tsx,jsx}';
@import 'brewfolio/styles/tokens.css';Scope
The package is intentionally narrower than it was during the experimental phases. It only keeps the surfaces that are part of the supported product. The old game layout and the unused generic widget layer were removed instead of being preserved as dead package weight.
