Astro static output, built as static files under dist/, with very little client-side JavaScript
my-portfolio — Astro Portfolio Template
By rkeshs
my-portfolio is an Astro-based single-page portfolio template whose content is managed in a single TypeScript file, with an MDX blog, RSS, and sitemap included.
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.
Single-page portfolio structure covering bio, experience, skills, projects, awards, and education sections
Supports light/dark themes and a reduced-motion preference
Content is managed centrally in src/lib/data.ts, and the avatar is generated by Astro at build time as responsive AVIF/JPEG variants
Built-in MDX blog based on content collections, generating an RSS feed and sitemap
Provides scripts for Oxfmt formatting, Oxlint checking, TypeScript, and Astro diagnostics
Template Details
my-portfolio is a responsive single-page portfolio template open-sourced by developer Rishikesh S. It is built with Astro, styled with Tailwind CSS, produces static files, and ships very little client-side JavaScript. The page includes sections for bio, work experience, skills, projects, awards, and education, and supports light/dark themes and a reduced-motion preference.
Content maintenance is fairly centralized: profile details, homepage and footer copy, section intros, experience, skills, projects, awards, and education are all edited in src/lib/data.ts; replacing the avatar at src/assets/profile.jpg causes Astro to generate responsive AVIF and JPEG variants at build time. Project artwork is mapped through the artwork field of selectedWork entries to branches in ProjectArtwork.astro. The social preview image is at public/og.png and can be re-captured based on docs/og-image-source.html.
The blog is based on Astro content collections: add a .md or .mdx file under src/content/blog and fill in frontmatter such as title, description, pubDate, and draft. Once draft is set to false, the post enters /blog, the static post routes, and the sitemap, and appears in /rss.xml.
Before use, note the following: the README requires Bun 1.3.14 and Node.js 22.12 or newer; local development starts with bun run dev, with the default address at http://localhost:4321. The site canonical URL is determined by the ORIGIN environment variable, falling back to the production domain configured in astro.config.ts when unset, affecting canonical, sitemap, and RSS. The build outputs to dist/ and can be deployed to Vercel or any static host. Third-party assets such as demo images, fonts, and icons must be checked separately under their own licenses; the code itself is MIT licensed.
Is it right for your project?
Use Cases
- Developers building a single-page personal portfolio to show experience, skills, and projects
- Maintaining a static technical blog with RSS alongside a portfolio
- Deploying to Vercel or any static hosting service
- Modifying and redistributing based on MIT-licensed code
Suitable For
- Developers familiar with Astro or willing to use Bun and Node.js as described in the README
- People who want to maintain portfolio content centrally in a single TypeScript file
- Personal sites that need static output and low client-side JavaScript
- Users planning to write posts in Markdown/MDX and output RSS and a sitemap
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Environment requirements: Bun 1.3.14, Node.js 22.12 or newer
- 2
After cloning the repository, run bun install, then start with bun run dev; the default address is http://localhost:4321
- 3
To override the site URL, copy .env.example to .env; ORIGIN takes precedence over the production domain in astro.config.ts
- 4
Edit profile, experience, skills, projects, and more in src/lib/data.ts; replace the avatar at src/assets/profile.jpg
- 5
Blog posts go in src/content/blog; only after draft is set to false do they enter the list, static routes, sitemap, and RSS
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry 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
- 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 under their own licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur separate charges.
- Using this template requires Bun 1.3.14 and Node.js 22.12 or newer; if the environment does not meet these requirements, installation and build per the README will not work.
- The site canonical URL is determined by the ORIGIN environment variable, falling back to the production domain in astro.config.ts when unset, affecting canonical, sitemap, and RSS.
- The build output is static files under dist/ and must be deployed by you to Vercel or any static hosting service; the template itself does not provide hosting.
- The template integrates Vercel Analytics by default; using this feature involves Vercel as an external service.
- Dependencies are pinned to exact versions; when upgrading, update both package.json and bun.lock, otherwise version inconsistencies may occur.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
- [Bun 1.3.14](https://bun.sh/) - Node.js 22.12 or newer (required by Astro 7)
Original README
Copy `.env.example` to `.env` when you need to override the site URL locally. `ORIGIN` takes precedence over the production URL that `astro.config.ts` falls back to
Original README
The site builds to static files in `dist/` and can be deployed to Vercel or any static host.
Original README
Static Astro output with Vercel Analytics
Original README
https://github.com/rkeshs/my-portfolio/blob/main/LICENSEhttps://github.com/rkeshs/my-portfolio/blob/main/README.mdDependencies are pinned to exact versions in `package.json`; update `package.json` and `bun.lock` together with Bun.
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
- Astro Themes
- Documentation and maintenance reference score
- More documented · 79 / 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-13
- 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-04
Inspect the recorded source material
SHA-256: 5dec12bae230c62ffe35e9da0e119ce6357874ea90dfd6e3c96258f1937eb46a
2026-10-04T08:04:26.253Z
Source file / repository# Modern Portfolio Template A responsive portfolio template built with Astro 7 and Tailwind CSS 4, shipping almost no client-side JavaScript.  ## Features - Responsive single-page portfolio - Light and dark themes - Reduced-motion support - Static Astro output with Vercel Analytics - Self-hosted, preloaded fonts and responsive AVIF/JPEG images - Content managed from one TypeScript file - Type-safe MDX blog with RSS feed and sitemap generation ## Requirements - [Bun 1.3.14](https://bun.sh/) - Node.js 22.12 or newer (required by Astro 7) ## Local development ```bash git clone https://github.com/rkeshs/my-portfolio.git cd my-portfolio bun install bun run dev ``` Open `http://localhost:4321`. Copy `.env.example` to `.env` when you need to override the site URL locally. `ORIGIN` takes precedence over the production URL that `astro.config.ts` falls back to, so canonical URLs, the sitemap, and the RSS feed are correct in every environment. ## Commands | Command | Purpose | | ---------------------- | -------------------------------------------------- | | `bun run dev` | Start the development server | | `bun run check` | Run Astro and TypeScript diagnostics | | `bun run format` | Format supported files with Oxfmt | | `bun run format:check` | Check formatting without changing files | | `bun run lint` | Run Oxlint correctness and code-quality checks | | `bun run typecheck` | Run TypeScript and Astro diagnostics | | `bun run build` | Create the production build in `dist/` | | `bun run preview` | Preview the production build locally | | `bun run astro sync` | Regenerate Astro types after configuration changes | ## Update portfolio content Edit [`src/lib/data.ts`](src/lib/data.ts) to update personal details, hero and footer copy, section intros, work experience, skills, projects, awards, and education. Replace `src/assets/profile.jpg` to update the portrait; Astro generates the responsive AVIF and JPEG variants at build time. Each entry in `selectedWork` names its illustration through `artwork`, which maps to a branch of [`src/components/ProjectArtwork.astro`](src/components/ProjectArtwork.astro). The social preview image lives at `public/og.png`. Regenerate it from [`docs/og-image-source.html`](docs/og-image-source.html) with a 1200×630 screenshot after changing the copy. ## Publish a blog post Add an `.md` or `.mdx` file under [`src/content/blog`](src/content/blog) with this frontmatter: ```yaml --- title: "Post title" description: "A concise summary for lists and search results." pubDate: 2026-07-18 draft: true --- ``` Set `draft` to `false` to include the post in `/blog`, static article routes, and the sitemap. An optional `updatedDate` accepts the same date format. Published posts also appear in the RSS feed at `/rss.xml`. ## Production verification ```bash bun install --frozen-lockfile bun run astro sync bun run format:check bun run lint bun run typecheck bun run build ``` Dependencies are pinned to exact versions in `package.json`; update `package.json` and `bun.lock` together with Bun. ## Deployment The site builds to static files in `dist/` and can be deployed to Vercel or any static host. The canonical site URL comes from the `ORIGIN` environment variable, falling back to the production domain configured in `astro.config.ts`. ## License MIT © 2026 Rishikesh S.
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
