Combines Astro with Vue islands, using Tailwind CSS and TypeScript
astro-cat-portfolio — Astro Portfolio Template
By sindurigf
An Astro and Vue personal portfolio and blog template with a neo-brutalist style, dark mode by default with light mode support, and built-in blog, talk slideshow, contact form, and accessibility tests.
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.
Neo-brutalist visual style, dark mode by default with light mode support
Built-in blog with feeds, talk slideshow, and contact form
About page includes an animated cat element
Tested against WCAG 2.2 AA in Chromium, Firefox, and WebKit
Contact form based on Cloudflare Workers and D1 database
Template Details
This is a portfolio and blog template for personal websites, built with Astro, Vue islands, Tailwind CSS, and TypeScript, targeting deployment on Cloudflare Workers. Visually, it adopts a neo-brutalist style, defaults to dark mode, and offers a light mode; the About page includes an animated cat element. On the content side, it provides a blog with feeds, a talk slideshow, and a contact form. For accessibility, the template is tested against WCAG 2.2 AA in Chromium, Firefox, and WebKit, and includes an accessibility statement, automated coverage notes, and a manual testing checklist. The contact form relies on Cloudflare's D1 database and email sending configuration; it returns 503 until the database is created and migrated. If the form is not needed, set the contact configuration to none, and the contact page will display an email address instead. Before use, replace placeholder copy, sample posts and talks, and photos, and update SECURITY.md, ACCESSIBILITY.md, and AI_DISCLOSURE.md. The template also includes an optional /brand design system page that can be removed by deleting the corresponding files and links.
Is it right for your project?
Use Cases
- Build a personal portfolio site to showcase projects and a personal introduction
- Run a personal blog with feeds and publish articles
- Provide a slideshow page for technical talks
- Receive visitor messages via the contact form (requires D1 and email configuration)
Suitable For
- Individual developers or designers who need a combined portfolio and blog site
- Sites that value accessibility standards and want WCAG 2.2 AA test coverage
- Users who prefer the Astro and Vue combination and plan to deploy to Cloudflare Workers
- Users who accept the neo-brutalist visual style and are willing to replace placeholder content
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
After creating a repository via Use this template, clone it and start with nvm use, npm ci, npx playwright install --with-deps chromium firefox, and npm run dev
- 2
Edit src/site.config.ts to configure the site name and URL, name, job title, email, social profiles, journeyPost, and analytics and contact toggles; invalid values will cause the build to fail
- 3
Replace placeholder copy, sample posts and talks, and photos, and update SECURITY.md, ACCESSIBILITY.md, and AI_DISCLOSURE.md
- 4
The contact form requires creating and migrating a D1 database, otherwise it returns 503; if the form is not needed, set form under contact to none and remove the d1_databases and send_email configuration from wrangler.jsonc
- 5
Refer to docs/DEPLOYMENT.md before deploying to Cloudflare; the /brand page is optional and can be removed by deleting the corresponding files and links
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version of the 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
- You may use, modify, commercialize, and distribute the code of this version 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 incur additional charges.
- The contact form returns 503 until a D1 database is created and migrated; Cloudflare D1 must be configured for normal use.
- If the contact form is not used, set form to 'none' under contact in src/site.config.ts and remove the d1_databases and send_email configuration from wrangler.jsonc.
- The deployment target is Cloudflare Workers, requiring deployment on the Cloudflare platform.
- Photos in src/assets/photos/ and src/assets/blog/ are licensed under CC BY 4.0 and require attribution in LICENSE-photos; when replacing photos, update or remove that file and the corresponding lines.
- The brand icon paths in src/assets/social-icons.svg come from Simple Icons and are licensed under CC0 1.0.
- The Lexend font is licensed under the SIL Open Font License 1.1, copyright 2019 The Lexend Project Authors.
- Before use, replace placeholder copy (lorem ipsum), sample posts and talks, and photos.
- Update SECURITY.md, ACCESSIBILITY.md, and AI_DISCLOSURE.md to describe your own site.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
The contact form answers 503 until its D1 database is created and migrated
Original README
To go without a form, set `form: 'none'` under `contact` in `src/site.config.ts`
Original README
Deploy to Cloudflare:
Original README
Photographs in `src/assets/photos/` and `src/assets/blog/` | CC BY 4.0, with the credit in [LICENSE-photos](LICENSE-photos)
Original README
`src/assets/social-icons.svg` | Brand icon paths from [Simple Icons](https://simpleicons.org), CC0 1.0
Original README
Lexend | SIL Open Font License 1.1, copyright 2019 The Lexend Project Authors
Original README
Replace the placeholder copy (lorem ipsum), the sample posts and talk, and the photos.
Original README
https://github.com/sindurigf/astro-cat-portfolio/blob/main/LICENSEhttps://github.com/sindurigf/astro-cat-portfolio/blob/main/README.mdUpdate [SECURITY.md](SECURITY.md), [ACCESSIBILITY.md](ACCESSIBILITY.md) and [AI_DISCLOSURE.md](AI_DISCLOSURE.md) to describe your site.
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-04. 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
- GitHub
- Documentation and maintenance reference score
- More documented · 85 / 100
- Technologies
- Astro · Vue
- Website type
- Portfolio · Blog
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-10-04
- Screenshot last checked
- 2026-10-04
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: fb88a7d354cbb8532e12f6109056ebbf8d7088352c5e68c5a5523e55999dfbb2
2026-10-04T20:28:29.647Z
Source file / repository# astro-cat-portfolio
A personal website template: Astro, Vue islands, Tailwind CSS and TypeScript on
Cloudflare Workers. Neo-brutalist, dark by default with a light mode, a blog
with feeds, a talk slideshow, a contact form, and animated cats on the About
page. Tested for WCAG 2.2 AA in Chromium, Firefox and WebKit.
## First steps
1. Create your repository with "Use this template", then clone it.
2. Install and run it:
```sh
nvm use
npm ci
npx playwright install --with-deps chromium firefox
npm run dev
```
3. Edit [`src/site.config.ts`](src/site.config.ts): site name and URL, your
name, job title, email and profiles, the post your pages point to for the
longer story (`journeyPost`), and the analytics and contact switches. The build fails on an invalid value.
4. Replace the placeholder copy (lorem ipsum), the sample posts and talk, and
the photos. Update [SECURITY.md](SECURITY.md),
[ACCESSIBILITY.md](ACCESSIBILITY.md) and
[AI_DISCLOSURE.md](AI_DISCLOSURE.md) to describe your site.
`/brand` shows your design system and links to your `repository`; it is
optional. To drop it, delete `src/pages/brand.astro`,
`src/components/brand/` and `tests/brand.spec.ts`, the Brand link in
`src/components/Footer.astro`, and every `'/brand'` under `tests/`.
5. Run the gate in [AGENTS.md](AGENTS.md#done-means): build, typecheck,
check and every test suite. CI runs the same on every pull request and
needs no secrets.
6. Deploy to Cloudflare:
[docs/DEPLOYMENT.md](docs/DEPLOYMENT.md#before-the-first-deploy).
- The contact form answers 503 until its D1 database is created and
migrated ([D1](docs/DEPLOYMENT.md#d1)).
- To go without a form, set `form: 'none'` under `contact` in
`src/site.config.ts`: `/contact` then shows your email address. Remove
the `d1_databases` and `send_email` blocks from `wrangler.jsonc` too
([contact options](docs/DEPLOYMENT.md#contact-options)).
## Documentation
- [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md): requirements, commands, layout,
posts, talks
- [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md): Cloudflare, D1, email, contact
options, Umami, dashboard and repository settings
- [ARCHITECTURE.md](ARCHITECTURE.md): stack, site config, tokens, content,
assets, headers
- [docs/STYLEGUIDE.md](docs/STYLEGUIDE.md): visual rules and page patterns
- [ACCESSIBILITY.md](ACCESSIBILITY.md): accessibility statement, automated
coverage, known gaps, reporting a barrier
- [docs/MANUAL_TESTING.md](docs/MANUAL_TESTING.md): by-hand accessibility
checklist
- [AGENTS.md](AGENTS.md): working rules, for people and agents
- [SECURITY.md](SECURITY.md): reporting a vulnerability
- [AI_DISCLOSURE.md](AI_DISCLOSURE.md): AI tooling used; none at runtime
## Contributing
Issues and pull requests are welcome. Report a security vulnerability privately
instead: [SECURITY.md](SECURITY.md). Pull requests use
[the template](.github/PULL_REQUEST_TEMPLATE.md) and the rules in
[AGENTS.md](AGENTS.md).
## Licence
| What | Licence |
| ---------------------------------------------------------- | ---------------------------------------------------------------------- |
| Source code, docs and everything not listed below | MIT, [LICENSE](LICENSE) |
| Photographs in `src/assets/photos/` and `src/assets/blog/` | CC BY 4.0, with the credit in [LICENSE-photos](LICENSE-photos) |
| `src/assets/social-icons.svg` | Brand icon paths from [Simple Icons](https://simpleicons.org), CC0 1.0 |
| Lexend | SIL Open Font License 1.1, copyright 2019 The Lexend Project Authors |
- The build writes `/licenses.txt` covering every third-party package,
vendored script and font sent to a browser (`scripts/licenses.mjs`).
- When you replace the photos with your own, update `LICENSE-photos`, or
remove it and its row.
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

astro-paper
AstroPaper is a minimal, responsive, accessible, and SEO-friendly Astro blog theme. Articles are stored as Markdown/MDX in src/content/posts/, with subdirectories affecting URLs.
Astro · Blog

fuwari
Fuwari is a static blog template built with Astro and Tailwind CSS for personal blogs. It manages posts as Markdown files in src/content/posts/, with frontmatter for title, date, description, cover, tags, categories, draft status, and language.
Astro · Blog

Firefly
Firefly is a clean personal blog theme forked from Astro and Fuwari, offering four background modes, single/double sidebar and list/grid layouts, Pagefind client-side full-text search, and a six-language UI.
Astro · Blog

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
