-
Notifications
You must be signed in to change notification settings - Fork 1
Fork Guide Customization
Everything visual and community-specific in ZAO OS is controlled through community.config.ts and Tailwind. This guide covers every knob you can turn.
name: 'YOUR COMMUNITY',
tagline: 'Your tagline here',These appear in the header, landing page, metadata, and throughout the UI.
colors: {
primary: '#f5a623', // Gold — buttons, links, highlights, accents
primaryHover: '#ffd700', // Lighter gold — hover states
background: '#0a1628', // Deep navy — main page background
surface: '#0d1b2a', // Slightly lighter — cards, panels, modals
surfaceLight: '#1a2a3a', // Lightest dark — hover states on surfaces
},ZAO OS is a dark-theme-first app. The color system assumes a dark background with a bright accent. If you want a light theme, you'll need to modify the Tailwind config and component classes more extensively.
Tips for choosing colors:
-
primaryshould contrast well againstbackground— this is your brand color -
surfaceshould be close tobackgroundbut visually distinct — it's for cards and panels - Keep
surfaceLightsubtle — it's for hover states, not standalone elements
Colors from community.config.ts are used directly in component classes. The Tailwind v4 config extends the default theme. You can further customize in tailwind.config.ts:
- Font families
- Border radius
- Spacing scale
- Animation/transition defaults
- Breakpoints
The app is organized into 5 pillars, each a top-level section:
pillars: {
social: { label: 'Social', icon: 'chat' },
governance: { label: 'Governance', icon: 'star' },
library: { label: 'Library', icon: 'book' },
tools: { label: 'Tools', icon: 'wrench' },
contribute: { label: 'Contribute', icon: 'code' },
},To rename a pillar: Change the label. The routing doesn't change — /chat is still /chat — but the sidebar and home page cards will show your label.
To reorder pillars: Reorder the keys. The sidebar renders them in object order.
To hide a pillar: You can't remove it from config alone (the routes still exist), but you can hide it from the sidebar by modifying src/components/navigation/Sidebar.tsx. See Fork Guide: Features for disabling entire feature areas.
farcaster: {
appFid: 19640, // Your app's Farcaster ID
channels: ['zao', 'zabal', 'cocconcertz', 'wavewarz'], // Channels to monitor
defaultChannel: 'zao', // Default channel in chat
},-
appFid— the Farcaster FID your app posts as. Create a new Farcaster account for your community if needed. -
channels— Farcaster channels your app monitors for casts. These appear as tabs in the chat view. -
defaultChannel— which channel loads first when users open chat.
voiceChannels: [
{ id: 'general-hangout', name: 'General Hangout', emoji: '💬', description: 'Casual conversation' },
{ id: 'fractal-call', name: 'Fractal Call', emoji: '📞', description: 'Monday 6pm EST weekly fractal' },
{ id: 'music-lounge', name: 'Music Lounge', emoji: '🎵', description: 'Always-on listening room' },
{ id: 'tech-talk', name: 'Tech Talk', emoji: '💻', description: 'Technical discussions' },
{ id: 'coworking', name: 'Coworking', emoji: '🏢', description: 'Silent cowork with ambient presence' },
],Add, remove, or rename channels. Each needs:
-
id— unique slug (used in URLs and database) -
name— display name -
emoji— shown in channel list -
description— shown below the name
music: {
radioName: 'ZAO Radio',
radioPlaylists: [
{
name: 'Ambition',
artist: 'Stilo World',
url: 'https://audius.co/dopestilo/album/ambition',
},
// Add more Audius playlists/albums...
],
},Radio pulls from Audius playlists. Replace these with playlists that match your community's taste. Any public Audius playlist or album URL works.
partners: [
{
name: 'MAGNETIQ',
description: 'Proof of Meet hub — verify real-world connections.',
url: 'https://app.magnetiq.xyz',
icon: 'magnet',
},
// ... add your own partners
],Replace with your community's ecosystem. These show up on the /ecosystem page as cards with links.
crossPosting: {
telegram: {
channelName: 'YOUR COMMUNITY',
channelUrl: 'https://t.me/yourchannel',
},
discord: {
serverName: 'YOUR COMMUNITY',
inviteUrl: 'https://discord.gg/yourinvite',
},
},snapshot: {
space: 'your-ens.eth',
hub: 'https://hub.snapshot.org',
graphqlUrl: 'https://hub.snapshot.org/graphql',
weeklyPollChoices: [
'Initiative 1 — Description',
'Initiative 2 — Description',
// ... your community's priorities
],
},You'll need a Snapshot space (free) at snapshot.org. The weeklyPollChoices are the options presented in weekly governance polls.
If your community has on-chain contracts:
// Respect tokens on Optimism
respect: {
ogContract: '0x...' as `0x${string}`,
zorContract: '0x...' as `0x${string}`,
chain: 'optimism' as const,
},
// Hats Protocol roles on Optimism
hats: {
contractAddress: '0x...' as `0x${string}`,
treeId: YOUR_TREE_ID,
chain: 'optimism' as const,
},
// Nouns DAO on Base
zounz: {
tokenContract: '0x...' as `0x${string}`,
chain: 'base' as const,
nounsBuilderUrl: 'https://nouns.build/dao/base/0x...',
},
// Arweave
arweave: {
gateway: 'https://arweave.net',
appName: 'YOUR-APP',
// ... license and file size config
},If you don't have these contracts, the features will gracefully degrade — no errors, just empty states. See Fork Guide: Features for how to disable features entirely.