AstroVuePortfolioBlog

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.

3 previews
Desktop homepage1 / 3
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 3

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-04View source

What stands out

A quick read of the recorded project description.

01

Combines Astro with Vue islands, using Tailwind CSS and TypeScript

02

Neo-brutalist visual style, dark mode by default with light mode support

03

Built-in blog with feeds, talk slideshow, and contact form

04

About page includes an animated cat element

05

Tested against WCAG 2.2 AA in Chromium, Firefox, and WebKit

06

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.

AstroVuePortfolioBlog

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

    Replace placeholder copy, sample posts and talks, and photos, and update SECURITY.md, ACCESSIBILITY.md, and AI_DISCLOSURE.md

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

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This 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

Update [SECURITY.md](SECURITY.md), [ACCESSIBILITY.md](ACCESSIBILITY.md) and [AI_DISCLOSURE.md](AI_DISCLOSURE.md) to describe your site.

Original README
https://github.com/sindurigf/astro-cat-portfolio/blob/main/LICENSEhttps://github.com/sindurigf/astro-cat-portfolio/blob/main/README.md

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

Explore similar templates

Compare previews and descriptions within the same stack and category.