Browse issues and PRs in tabs by repository, with tab order sortable alphabetically, by star count, or custom order
project-board — Astro Starter Template
By withstudiocms
An Astro-based server-rendered starter that aggregates issues, PRs, and discussions from any GitHub organization into a single board, with a separate roadmap page.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 2
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Filter entries by combinations of status, type, and repository
A separate /roadmap page displays discussions, issues, and PRs in a three-column layout
View the rendered markdown of a specified repository's README in a modal, including heading levels, code blocks, tables, and anchor links
Offers light, dark, and auto themes, with preference saved in localStorage
GitHub API responses are cached in memory for 5 minutes
Template Details
This is a starter template built with Astro server-side rendering (SSR), designed to aggregate issues, pull requests, and discussions from a GitHub organization into a unified interface. The homepage displays entries in tabs by repository, with filtering by status (open/closed/all), type (issue/PR/discussion/all), and repository. A separate /roadmap page presents discussions, issues, and pull requests in a three-column layout, and allows viewing the rendered README of a given repository in a modal.
Data comes from two sources: issues, pull requests, releases, repository metadata, and READMEs are fetched via the GitHub REST API, while discussions are fetched via the GitHub GraphQL API and require a token; when discussions are not enabled, the roadmap page shows only issues and PRs. All API responses are cached in memory for 5 minutes.
Before use, configure the target organization, optional token, allowed repository list, maximum items per page, whether to enable discussions, the repository used for the roadmap, and default repository tabs in src/config.ts. The template is released under the MIT license, and a demo site is available, but deployment requires a Node.js environment, and setting GITHUB_TOKEN is recommended to raise API rate limits.
Is it right for your project?
Use Cases
- Build a public overview page of issues and PRs for a GitHub organization
- Present discussions, issues, and PRs from a roadmap repository together as a roadmap page
- View repository README content directly within the project board
- Scenarios requiring quick filtering of GitHub entries by repository, status, and type
Suitable For
- Developers using Astro and accepting a server-rendered deployment approach
- Open-source maintainers who need to aggregate and display organization-level GitHub issues, PRs, and discussions
- Teams wanting to adjust displayed repository scope, sorting, and roadmap repository through configuration
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Requires Node.js 22+ or the latest LTS, and install dependencies with pnpm
- 2
Set fields such as organization, allowedRepositories, roadmapRepository, and defaultRepository in src/config.ts
- 3
Discussions depend on the GitHub GraphQL API and require a token; when not enabled, the roadmap page shows only issues and PRs
- 4
It is recommended to set GITHUB_TOKEN via .env; without a token the REST API is limited to 60 requests per hour, with a token 5000
- 5
The build output requires a Node.js environment to run and can be deployed to Vercel, Netlify, Railway, or run yourself with node dist/server/entry.mjs
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis listing covers the free version in a public repository under the MIT license; the free scope is the code of this version and does not imply that external services or third-party assets are free.
Must comply with when using
- Free use, modification, commercial use, and distribution of this version's code are permitted.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- A GitHub personal access token is optional: without one, the REST API allows only 60 requests per hour; with one, it increases to 5000 per hour.
- The discussions feature depends on the GitHub GraphQL API and requires token authentication; when not enabled, the roadmap page shows only issues and pull requests.
- Deployment must use an environment that supports Node.js server-side rendering; it cannot be hosted as a purely static site.
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional charges.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
(Optional) GitHub Personal Access Token for higher rate limits
Original README
Discussions (requires authentication)
Original README
https://github.com/withstudiocms/project-board/blob/main/LICENSEhttps://github.com/withstudiocms/project-board/blob/main/README.mdThe application requires a Node.js environment for SSR.
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-03. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- Astro Themes
- Documentation and maintenance reference score
- More documented · 83 / 100
- Technologies
- Astro
- Website type
- Starter
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-03-10
- Screenshot last checked
- 2026-10-03
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Astro as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: [email protected] · 2026-10-04
Inspect the recorded source material
SHA-256: 4c2ea06ab19ea8f6c8749f28bfd9da9b8d9f5a17a8d2750bbf0e1cde0687f85f
2026-10-03T19:22:47.812Z
Source file / repository# GitHub Project Board
<img width="2333" height="1197" alt="image" src="./assets/page-index.png" />
A server-side rendered Astro application that provides a unified view of GitHub issues, pull requests, and discussions for any GitHub organization. Features repository tabs, advanced filtering, and a dedicated roadmap page with README viewer.
## Features
- **Repository Tabs**: Browse issues and PRs by repository with alphabetical sorting
- **Advanced Filtering**: Filter by state (open/closed/all), type (issue/PR/discussion/all), and repository
- **Roadmap Page**: Dedicated roadmap view with three-column layout (Discussions, Issues, PRs)
- **README Viewer**: View repository README files in a modal dialog with markdown rendering
- **Theme Support**: Light, dark, and auto modes with persistent preference
- **Responsive Design**: Mobile-friendly interface that works on all devices
- **Smart Caching**: In-memory cache with 5-minute TTL for faster performance
- **Quick Navigation**: Direct links to GitHub organization and repositories
## Tech Stack
- **Astro v6** - SSR-enabled with @astrojs/node adapter
- **TypeScript** - Type-safe development
- **GitHub REST API** - Issues, PRs, releases, repositories
- **GitHub GraphQL** - Discussions (requires token)
- **markdown-it** - Markdown parsing for README viewer
- **CSS Variables** - Comprehensive theming system
## Getting Started
### Prerequisites
- Node.js 22+ or latest LTS
- pnpm package manager
- (Optional) GitHub Personal Access Token for higher rate limits
### Installation
```bash
# Install dependencies
pnpm install
# Start development server
pnpm dev
# Build for production
pnpm build
# Preview production build
pnpm preview
```
## Project Structure
```
/
├── src/
│ ├── assets/ # Assets for OG Images
│ │ ├── logo.png # Png version of the logo used for OG Images
│ │ ├── og-bg.png # Png background used for OG Images
│ │ ├── Onest-*.ttf # Fonts for OG images
│ ├── components/
│ │ ├── FilterBar.astro # State/type filter controls
│ │ ├── GitHubItem.astro # Individual item card display
│ │ ├── ThemeSelector.astro # Light/dark/auto theme switcher
│ │ └── ThemeManager.astro # Client-side theme management
│ ├── layouts/
│ │ └── BaseLayout.astro # Main layout with header/nav/footer
│ ├── lib/
│ │ ├── github.ts # GitHub API integration + caching
│ │ └── types.ts # Types for the project config
│ ├── pages/
│ │ ├── open-graph/
│ │ │ └── [...route].ts # Dynamic route for generating OG images
│ │ ├── index.astro # Main board with repository tabs
│ │ └── roadmap.astro # Roadmap page with README viewer
│ ├── styles/
│ │ └── global.css # Unified styles with CSS variables
│ └── config.ts # Project configuration
├── public/ # Static assets
├── .env.example # Environment variables template
├── astro.config.mjs # Astro configuration
└── package.json
```
## GitHub Integration
This project integrates with GitHub using both REST and GraphQL APIs, handled in [src/lib/github.ts](src/lib/github.ts):
### REST API
- Issues, pull requests, and releases
- Repository metadata and listings
- README content fetching
- Works without authentication (lower rate limits)
### GraphQL API
- Discussions (requires authentication)
- Configurable via `enableDiscussions` in config
> [!note]
> Without discussions the roadmap page will be limited to issues and pull requests
### Caching
All API responses are cached in memory with a 5-minute TTL to improve performance and reduce API calls.
## Configuration
The project is configured via [src/config.ts](src/config.ts):
```typescript
export const config: ProjectConfig = {
// GitHub organization to monitor
organization: 'withstudiocms',
// Optional: GitHub token for higher rate limits
// You can also set this via GITHUB_TOKEN environment variable
githubToken: process.env.GITHUB_TOKEN || '',
// List specific repositories to display
// Leave empty ([]) to show all repositories
allowedRepositories: [],
// Example: ['studiocms', 'studiocms.dev', 'ui']
// Maximum items to fetch per request
maxItemsPerPage: 100,
// Enable/disable discussions (requires GraphQL API)
enableDiscussions: true,
// Repository used for roadmap page
roadmapRepository: 'roadmap',
// Default repository tab to show on index page
defaultRepository: 'studiocms',
// Custom function to sort repositories
// Default: alphabetical sort
repositorySort: (repos) => repos.sort((a, b) =>
a.name.localeCompare(b.name)
),
};
```
### Repository Configuration
**Filtering Repositories**: Limit display to specific repos:
```typescript
allowedRepositories: ['repo1', 'repo2', 'repo3']
```
**Default Repository**: Set which repository tab opens by default on the index page:
```typescript
defaultRepository: 'your-main-repo'
```
**Repository Sorting**: Customize how repositories are sorted in tabs. Examples:
```typescript
// Alphabetical (default)
repositorySort: (repos) => repos.sort((a, b) => a.name.localeCompare(b.name))
// By star count (descending)
repositorySort: (repos) => repos.sort((a, b) => b.stargazers_count - a.stargazers_count)
// Custom order with fallback to alphabetical
repositorySort: (repos) => {
const order = ['main-repo', 'docs', 'examples'];
return repos.sort((a, b) => {
const aIndex = order.indexOf(a.name);
const bIndex = order.indexOf(b.name);
if (aIndex !== -1 && bIndex !== -1) return aIndex - bIndex;
if (aIndex !== -1) return -1;
if (bIndex !== -1) return 1;
return a.name.localeCompare(b.name);
});
}
```
### Roadmap Configuration
Set the repository name used for the roadmap page:
```typescript
roadmapRepository: 'roadmap'
```
This repository's discussions, issues, and pull requests will be displayed on `/roadmap` in a three-column layout. The README from this repository can be viewed in a modal dialog.
### GitHub API Rate Limits
- **Without token**: 60 requests per hour
- **With token**: 5,000 requests per hour
To get a token:
1. Go to https://github.com/settings/tokens
2. Generate a new token (classic)
3. Select scopes: `public_repo` (for public repos) or `repo` (for private repos)
4. Add to `.env` file: `GITHUB_TOKEN=your_token_here`
## Pages
### Index Page (`/`)
- **Repository Tabs**: Browse issues and PRs by repository
- **Filtering**: State (open/closed/all) and type (issues/PRs/discussions/all)
- **List View**: Single-column list of items with labels and metadata
- **Navigation**: Links to GitHub org and individual repositories
### Roadmap Page (`/roadmap`)
- **Three-Column Layout**: Discussions, Issues, and Pull Requests
- **README Viewer**: Click "View README" to open a modal with rendered markdown
- **Markdown Features**: Full heading hierarchy, code blocks, tables, anchor links
- **Smooth Scrolling**: Navigate README via table of contents
## Styling System
All styles are centralized in [src/styles/global.css](src/styles/global.css) using CSS variables:
- **Root Variables**: Colors, shadows, borders, and typography
- **Dark Theme**: Automatic overrides via `[data-theme="dark"]`
- **Component Styles**: Shared styles for filters, cards, badges, and layouts
- **Theme Persistence**: User preference saved to localStorage
Components contain minimal component-specific CSS only.
## Development
The application uses Astro's SSR mode with the Node.js adapter. Each page request:
1. Fetches data from GitHub (with caching)
2. Applies user-selected filters
3. Renders the complete page server-side
4. Delivers ready-to-view HTML to the browser
### Development Server
```bash
pnpm dev
```
The dev server includes:
- Hot module reloading
- TypeScript type checking
- Astro's SSR preview
## Deployment
Build the project and deploy with a Node.js compatible hosting service:
```bash
# Build for production
pnpm build
# Preview production build locally
pnpm preview
```
The application requires a Node.js environment for SSR. Compatible platforms include:
- **Vercel**: Zero-config deployment with automatic SSR support
- **Netlify**: Enable SSR in build settings
- **Railway**: Node.js deployment with environment variables
- **Any VPS**: Run `node dist/server/entry.mjs` after build
### Environment Variables
Set these in your hosting platform:
```bash
GITHUB_TOKEN=your_github_personal_access_token
```
## Browser Support
- Modern browsers with CSS Grid and Custom Properties support
- Native dialog element support (Chrome 37+, Firefox 98+, Safari 15.4+)
- JavaScript required for theme persistence and dialog interactions
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Update tests and documentation
5. Submit a pull request
## License
MIT
Explore similar templates
Compare previews and descriptions within the same stack and category.

astrowind
AstroWind is a free, open-source Astro starter theme using Astro and Tailwind CSS, released under the MIT license.
Astro · Blog
accessible-astro-starter
An accessibility-focused Astro 6 starter template with WCAG 2.2 AA practices, Tailwind CSS 4, TypeScript, Prettier, ESLint, form validation, blog and portfolio examples, and preference toggles for dark mode, high contrast, and reduced motion.
Astro · Blog

astro-erudite
astro-erudite is an opinionated, unstyled static blog template built with Astro and native CSS, with no UI or CSS framework and minimal dependencies.
Astro · Portfolio

astro-shopify
A lightweight Shopify headless ecommerce starter template built with Astro and Svelte, integrating the Shopify Storefront API for product and inventory data, with built-in cart state management and basic add-to-cart and checkout flow.
Astro · E-commerce

brutal
Brutal is a neobrutalism Astro starter theme from ElianCodes, derived from the author's personal site and generalized. It includes a Markdown blog collection, build-time RSS and sitemap, image optimization, Tailwind CSS styling, and Biome checks, with no JavaScript by default.
Astro · Starter

qwind
Qwind is a free and open-source website template built on Qwik and Tailwind CSS, featuring directory-based routing via QwikCity, a Markdown blog, dark mode, and static deployment configuration.
Astro · Tool Site
