Uses Astro static generation, with content maintained via JSON data and MDX files
ctros — Astro Portfolio Template
By aglabsid
Ctros is a minimal personal website template built with Astro, including modules for a blog, project showcase, comments, and analytics, under the MIT license.
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 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Built-in Giscus comment system based on GitHub Discussions
Supports Umami privacy-friendly visit analytics
Automatically generates dynamic Open Graph images for social sharing
Provides a dark theme, responsive layout, and View Transitions page transitions
Optional GitHub Action to send Discord notifications when new posts are pushed
Template Details
Ctros is a minimal personal website template built with Astro, suitable for creating a personal homepage, portfolio, and blog. Content is managed through JSON data and MDX files: about.json, software.json, hardware.json, and project-categories.json under src/data are used to maintain personal information, frequently used software and hardware, and project categories; src/content/post and src/content/project store blog posts and project entries, respectively, each as a folder containing index.mdx. The template includes Giscus comments, Umami analytics, dynamic Open Graph images, View Transitions, a dark theme, and a responsive layout, and provides an optional Discord notification GitHub Action. Before use, Node.js 22+ and pnpm (or npm) are required; copy .env.example to .env and fill in the Giscus-related variables, and configure the Umami website ID in astro.config.mjs. Discord notifications are disabled by default; to enable them, configure the webhook in repository Secrets and uncomment the push trigger block in the workflow.
Is it right for your project?
Use Cases
- Build a personal homepage and display bio, skills, frequently used software, and hardware information
- Publish MDX blog posts with tags, summaries, and thumbnails
- Showcase personal projects by category, with GitHub repository and demo links
- Add GitHub Discussions-based comments to blog posts
- Use Umami to track site visit data
Suitable For
- Developers who want to build a minimal personal website or portfolio with Astro
- Users who prefer managing content with MDX and JSON files
- Personal sites that need common blog features such as comments, visit analytics, and social share images
- Users who can configure Giscus, Umami, and GitHub Actions themselves
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Requires Node.js 22+; using pnpm to install dependencies is recommended
- 2
Copy .env.example to .env and fill in the Giscus repository name, repository ID, category name, and category ID
- 3
For Umami, register or self-host to obtain a website ID, then configure it in astro.config.mjs
- 4
Discord notifications are disabled by default; configure repository Secrets and variables and uncomment the push trigger block in the workflow
- 5
Third-party assets such as demo images, fonts, and icons must be checked against their respective licenses; external services may charge additional fees
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis listing covers the free version in the public repository under the MIT license; the free scope is the code of that version and does not mean external services or third-party assets are free.
Must comply with when using
- The code of this version may be used, modified, used commercially, and distributed for free.
- 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
- 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 charge additional fees.
- Using the comment feature requires configuring Giscus environment variables pointing to your own GitHub repository.
- Visit analytics depends on Umami; you need to register a hosted account or set up your own instance.
- Giscus comments are based on GitHub Discussions, which must be enabled in the repository.
- The Giscus GitHub app must be installed and authorized for your repository.
- Discord notifications require creating your own webhook and configuring repository secrets.
- The Discord notification workflow is disabled by default and must be enabled manually.
- You must uncomment the push trigger block in the workflow to send notifications automatically.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
PUBLIC_GISCUS_REPOSITORY_NAME=your-username/your-repo
Original README
1. **Create an Umami account**:
Original README
1. **Enable GitHub Discussions** on your repository:
Original README
2. **Install the Giscus app**:
Original README
1. **Create a webhook**: Discord channel → Edit Channel → Integrations → Webhooks → New Webhook, then copy the URL
Original README
It is disabled by default.
Original README
https://github.com/aglabsid/ctros/blob/main/LICENSEhttps://github.com/aglabsid/ctros/blob/main/README.md3. **Enable the trigger** by uncommenting the `push` block in the workflow:
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-05. 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
- Portfolio
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-09-28
- Screenshot last checked
- 2026-10-05
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-05
Inspect the recorded source material
SHA-256: 74bbbc41848d9fa0517caf848e19289c5c9bcdc79259665eb08ade1c5717e6ca
2026-10-05T01:18:42.736Z
Source file / repository# Ctros Minimal personal website template built with [Astro](https://astro.build). ## Features - ⚡ **Fast & Lightweight** - Static site generation with Astro - 🖼️ **Dynamic Open Graph Images** - Auto-generated OG images for social sharing - 📝 **JSON & MDX Content** - Easy content management with JSON data and MDX for blog posts - 💬 **Post Comments** - Integrated commenting system powered by [Giscus](https://giscus.app/) - 🔔 **Discord Notifications** - Optional GitHub Action that announces new posts to Discord - 📊 **Analytics** - Privacy-friendly analytics with [Umami](https://umami.is/) - 🎨 **View Transitions** - Smooth page transitions with shared element animations - 🌙 **Dark Theme** - Beautiful dark mode design - 📱 **Responsive** - Mobile-first responsive layout - 🔍 **SEO Optimized** - Meta tags and structured data support ## Tech Stack - [Astro](https://astro.build) - Static Site Generator - [React](https://react.dev) - UI Components - [Tailwind CSS](https://tailwindcss.com) - Styling - [MDX](https://mdxjs.com) - Content authoring - [Shiki](https://shiki.style) - Syntax highlighting - [Giscus](https://giscus.app) - Comments - [Umami](https://umami.is) - Analytics ## Getting Started ### Prerequisites - Node.js 22+ - pnpm (recommended) or npm ### Installation 1. Clone the repository: ```bash git clone [email protected]:aglabsid/ctros.git cd ctros ``` 2. Install dependencies: ```bash pnpm install ``` 3. Create environment variables: ```bash cp .env.example .env ``` 4. Configure your environment variables (see [Configuration](#configuration)) 5. Start the development server: ```bash pnpm dev ``` ## Configuration ### Environment Variables Create a `.env` file in the root directory with the following variables: ```env # Giscus Configuration PUBLIC_GISCUS_REPOSITORY_NAME=your-username/your-repo PUBLIC_GISCUS_REPOSITORY_ID=your-repo-id PUBLIC_GISCUS_CATEGORY_NAME=Announcements PUBLIC_GISCUS_CATEGORY_ID=your-category-id ``` ### Setting up Umami Analytics [Umami](https://umami.is/) is a simple, fast, privacy-focused analytics alternative to Google Analytics. This project uses [@yeskunall/astro-umami](https://github.com/yeskunall/astro-umami) integration. 1. **Create an Umami account**: - Sign up at [cloud.umami.is](https://cloud.umami.is/) (hosted) or self-host your own instance 2. **Add your website**: - Go to Settings → Websites → Add website - Enter your website name and domain 3. **Get your Website ID**: - Click on your website in the dashboard - Copy the Website ID from the tracking code 4. **Update `astro.config.mjs`**: ```js import yeskunallumami from '@yeskunall/astro-umami' export default defineConfig({ integrations: [ // ...other integrations yeskunallumami({ id: 'your-website-id', hostUrl: 'https://cloud.umami.is', // or your self-hosted URL }), ], }) ``` For more details, see the [Umami documentation](https://umami.is/docs). ### Setting up Giscus [Giscus](https://giscus.app/) is a comments system powered by GitHub Discussions. 1. **Enable GitHub Discussions** on your repository: - Go to your repository → Settings → General - Scroll to "Features" section - Check "Discussions" 2. **Install the Giscus app**: - Visit [github.com/apps/giscus](https://github.com/apps/giscus) - Click "Install" and select your repository 3. **Get your configuration values**: - Go to [giscus.app](https://giscus.app/) - Enter your repository name - Choose your preferred settings - Copy the `data-repo-id` and `data-category-id` values 4. **Update your `.env` file** with the values from step 3 For more details, see the [Giscus documentation](https://giscus.app/). ### Setting up Discord Notifications `.github/workflows/discord-notify.yml` posts a message to Discord whenever a new post is pushed to `main`. It is disabled by default. 1. **Create a webhook**: Discord channel → Edit Channel → Integrations → Webhooks → New Webhook, then copy the URL 2. **Add repository settings** (Settings → Secrets and variables → Actions): - Secret `DISCORD_WEBHOOK_URL` - the webhook URL - Variable `SITE_URL` - your site URL, e.g. `https://example.com` - Variable `DISCORD_ROLE_ID` (optional) - role to mention 3. **Enable the trigger** by uncommenting the `push` block in the workflow: ```yaml on: workflow_dispatch: push: branches: [main] paths: ['src/content/post/**/index.mdx'] ``` ## Project Structure ``` ctros/ ├── public/ # Static assets ├── src/ │ ├── components/ # UI components │ │ └── mdx/ # MDX components │ ├── content/ # Content collections │ │ ├── post/ # Blog posts (MDX) │ │ └── project/ # Projects (MDX) │ ├── data/ # JSON data files │ ├── layouts/ # Page layouts │ ├── lib/ # Utility functions │ ├── pages/ # Page routes │ └── styles/ # Global styles ├── astro.config.mjs # Astro configuration └── package.json ``` ## Content Management ### Blog Posts Create a new folder in `src/content/post/` with an `index.mdx` file: ```mdx --- title: My Post Title thumbnail: ./thumbnail.png thumbnailCredit: Photo by Someone summary: A brief summary of the post tags: - tag1 - tag2 author: Your Name createdAt: 2025-01-01T10:00:00+00:00 updatedAt: 2025-01-01T10:00:00+00:00 --- Your content here... ``` ### Projects Create a new folder in `src/content/project/` with an `index.mdx` file: ```mdx --- title: Project Name thumbnail: ./thumbnail.png description: Project description category: web github: https://github.com/... demo: https://... --- Project details here... ``` ### Site Data Edit the JSON files in `src/data/` to customize: - `about.json` - Personal information (`firstName`, `lastName`, `headline`, `email`, `cv`, bio, skills, social links) - `software.json` - Software/tools you use - `hardware.json` - Hardware/equipment - `project-categories.json` - Project categories ## Commands | Command | Description | | -------------- | ------------------------- | | `pnpm dev` | Start development server | | `pnpm build` | Build for production | | `pnpm preview` | Preview production build | | `pnpm format` | Format code with Prettier | ## License MIT License
Explore similar templates
Compare previews and descriptions within the same stack and category.

astro-theme-cactus
Astro Cactus is an Astro-based blog and portfolio theme that uses Markdown/MDX content collections to manage posts, notes, and tags, with frontmatter type-checked by a schema.
Astro · Portfolio

astrofy
Astrofy is a free and open-source personal portfolio website template built with Astro and TailwindCSS, with built-in blog, CV timeline, project showcase, store, and RSS feed modules.
Astro · Portfolio

astro-nano
Astro Nano is a static, minimalist portfolio and blog template built with Astro, Tailwind, and TypeScript without frontend frameworks. It includes light/dark themes, animated UI, automatic sitemap and RSS feed generation, and Markdown/MDX support with component imports.
Astro · Portfolio

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-sphere
Astro Sphere is a static, minimalist portfolio and blog theme maintained by markhorn-dev, built mainly with Astro, Tailwind, and TypeScript, with a small amount of SolidJS for stateful components.
Astro · Portfolio

astro-micro
Astro Micro is a framework-free blog and portfolio theme for Astro, forked from Astro Nano. It adds Pagefind search and Giscus comments while retaining type safety, sitemap, RSS, Markdown and MDX support, and TailwindCSS with system, light, and dark themes.
Astro · Portfolio
