AstroStarter

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.

2 previews
Desktop homepage1 / 2
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 2

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-03View source

What stands out

A quick read of the recorded project description.

01

Browse issues and PRs in tabs by repository, with tab order sortable alphabetically, by star count, or custom order

02

Filter entries by combinations of status, type, and repository

03

A separate /roadmap page displays discussions, issues, and PRs in a three-column layout

04

View the rendered markdown of a specified repository's README in a modal, including heading levels, code blocks, tables, and anchor links

05

Offers light, dark, and auto themes, with preference saved in localStorage

06

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.

AstroStarter

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. 1

    Requires Node.js 22+ or the latest LTS, and install dependencies with pnpm

  2. 2

    Set fields such as organization, allowedRepositories, roadmapRepository, and defaultRepository in src/config.ts

  3. 3

    Discussions depend on the GitHub GraphQL API and require a token; when not enabled, the roadmap page shows only issues and PRs

  4. 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. 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

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This 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

The application requires a Node.js environment for SSR.

Original README
https://github.com/withstudiocms/project-board/blob/main/LICENSEhttps://github.com/withstudiocms/project-board/blob/main/README.md

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
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.