Repository Structure
This repository uses a pnpm workspace to manage multiple packages and projects. Understanding the structure will help you navigate the codebase and know where to make changes.
Top-Level Directories
content/
All course materials and internal documentation live here.
content/courses/β Course content organized by course (e.g.,advanced-ui/,advanced-figma/)content/handbook/β Internal documentation and style guides (this handbook)content/workspace/β Workspace-specific content, proposals, and ideas
Most content is written in Chalk (.chalk files), which is our content authoring format. See the Chalk documentation for details.
packages/
Internal tools and utilities that support our work. These are managed as pnpm workspace packages.
packages/chalk/β The Chalk build system and content processorpackages/workbench/β Interactive UI demo tool for educational contentpackages/blueprint/β Layered UI component library for Workbenchpackages/dashboard/β Analytics dashboard (Observable-based)packages/invoice-downloader/β Internal tool for managing invoicespackages/aui-preview/β Preview tool for Advanced UI course
Each package typically has its own package.json, dependencies, and development scripts. See Tools and Packages for more details.
websites/
Source files for our public-facing websites.
websites/buttonschool.com/β Main Button School websitewebsites/chalkboard.buttonschool.com/β Chalkboard preview toolwebsites/handbook.buttonschool.com/β This handbook (public version)websites/uimc.buttonschool.com/β UI Masterclass website
Each website has its own build configuration and deployment setup.
lab/
Experiments, prototypes, and early-stage work. This is where we try out new ideas before they become full tools or features.
lab/gather/β Project management prototype (Flask/Python)lab/school-planner/β Course planning tool (Svelte)lab/course-exporter/β Tool for exporting courses as zip fileslab/codepen-archive/β Archive of CodePen demos and exampleslab/video-scrubber/β Video navigation prototype
Projects in lab/ may eventually graduate to packages/ if they become production tools, or they may remain experimental.
Root-Level Files
Configuration Files
package.jsonβ Root package configuration and workspace scriptspnpm-workspace.yamlβ Defines the pnpm workspace structurepnpm-lock.yamlβ Lock file for dependenciesBrewfileβ Homebrew packages installed bysetup.shsetup.shβ Initial setup script for new team members
Documentation
README.chalkβ Repository overview (rendered on GitHub).gitignoreβ Git ignore patterns
Other Files
Most other files in the root are configuration for build tools, linters, or deployment. If you’re just working on content, you typically don’t need to modify these.
pnpm Workspace Structure
This repository uses pnpm workspaces to manage multiple packages. The workspace is defined in pnpm-workspace.yaml and includes:
- All packages in
packages/ - All websites in
websites/ - All lab projects in
lab/
This means:
- Dependencies are installed from the root with
pnpm install - Packages can depend on each other using workspace protocol (
workspace:*) - Scripts can be run from the root or individual packages
- Dependencies are hoisted and shared where possible
When to Use Each Directory
Use content/ when:
- Creating or editing course materials
- Writing handbook documentation
- Adding new lessons or guides
Use packages/ when:
- Working on internal tools
- Fixing bugs in Chalk, Workbench, or other tools
- Adding features to existing tools
Use websites/ when:
- Making changes to public-facing websites
- Updating site content or styling
- Working on deployment configurations
Use lab/ when:
- Experimenting with new ideas
- Building prototypes
- Testing concepts before they become production tools
Finding Specific Things
For a quick reference on where to find specific content, tools, or documentation, see Finding Things.