A community website for the local tech community in the Bryan-College Station area. Features a blog, newsletter signup, and event information.
- Astro - Static site generator with React integration
- React 19 - Interactive components
- Tailwind CSS v4 - Utility-first styling
- Catalyst UI Kit - Headless UI component library
To get started with development, you'll need Podman and Podman Compose installed.
-
Start the Development Environment:
Run the following command to build the container images and start the development services (frontend and backend):
podman-compose up --build -d
- The frontend application will be accessible at
http://localhost:4321. It supports hot-reloading: any changes you make to the source code on your host machine will automatically refresh in the browser. - The backend (PocketBase) will be accessible at
http://localhost:8090.
- The frontend application will be accessible at
-
Stop the Development Environment:
To stop and remove the running containers, use:
podman-compose down
/
├── src/
│ ├── pages/ # Routes (/, /blog, /blog/[slug])
│ ├── components/ # React and Astro components
│ │ ├── catalyst/ # Catalyst UI Kit components (28 files)
│ │ ├── Header.tsx # Site navigation
│ │ ├── Hero.tsx # Landing page hero
│ │ ├── Newsletter.tsx # Email signup form
│ │ └── Footer.tsx # Site footer
│ ├── content/
│ │ └── blog/ # Blog posts (Markdown)
│ ├── layouts/
│ │ └── Layout.astro # Base HTML layout
│ └── styles/
│ └── global.css # Tailwind imports
├── catalyst-ui-kit/ # Original Catalyst source files
└── public/ # Static assets
The site uses Catalyst UI Kit, a collection of beautiful, accessible UI components built with Headless UI and Tailwind CSS.
All Catalyst components are in src/components/catalyst/:
- Form Elements: Button, Input, Textarea, Select, Checkbox, Radio, Switch, Combobox, Listbox
- Layout: Divider, Heading, Text, Badge, Avatar
- Navigation: Navbar, Sidebar, Pagination, Link
- Feedback: Alert, Dialog
- Data Display: Table, Description List, Fieldset
Import components from the catalyst directory:
import { Button } from "./catalyst/button";
import { Input } from "./catalyst/input";
import { Heading, Subheading } from "./catalyst/heading";
import { Text } from "./catalyst/text";
export default function MyComponent() {
return (
<div>
<Heading>Welcome</Heading>
<Text>This is a paragraph of text.</Text>
<Input type="email" placeholder="Enter email" />
<Button color="indigo">Subscribe</Button>
</div>
);
}Full documentation for all components: catalyst.tailwindui.com/docs
The documentation includes:
- Component APIs and props
- Usage examples
- Accessibility features
- Styling customization
The Catalyst components are source files in src/components/catalyst/, not npm packages. This means you can:
- Modify directly - Edit component files to customize behavior or styling
- Extend components - Create wrapper components with custom props
- Add variants - Extend color schemes or add new button styles
- Change defaults - Adjust sizing, spacing, or other defaults
Example customization:
// Wrap a Catalyst component with custom defaults
import { Button as CatalystButton } from "./catalyst/button";
export function PrimaryButton(props) {
return <CatalystButton color="indigo" {...props} />;
}The original source files are preserved in catalyst-ui-kit/ for reference.
Create a new Markdown file in src/content/blog/:
---
title: "Your Post Title"
description: "Brief description for SEO and previews"
pubDate: 2025-01-23
author: "Your Name"
tags: ["typescript", "tutorial"]
---
Your blog content here in Markdown...The post will automatically appear at /blog/your-filename after running the dev server or build.
Create a new .astro file in src/pages/ for new routes:
---
import Layout from "../layouts/Layout.astro";
import Header from "../components/Header";
import Footer from "../components/Footer";
---
<Layout title="Page Title">
<Header client:load />
<!-- Your page content -->
<Footer />
</Layout>The site uses Tailwind CSS v4 with a consistent design system:
- Colors: zinc (neutrals), indigo (accent)
- Dark mode: Automatic via
prefers-color-scheme - Typography: Tailwind Typography plugin for blog content
- Responsive: Mobile-first with sm/lg breakpoints
All Catalyst components include dark mode support by default.