A modern, high-performance developer portfolio built with Astro, Svelte, Tina CMS, and Tailwind CSS.
Live Site: temesgen.vercel.app
| Category | Technologies |
|---|---|
| Framework | Astro 5 |
| UI Library | Svelte 5 |
| CMS | Tina CMS (Visual Headless CMS) |
| Styling | Tailwind CSS 4 |
| Resend | |
| Validation | Zod |
| Icons | Lucide + Iconify |
| Deployment | Vercel |
git clone https://github.com/temesgen-982/portfolio-astro.git
cd portfolio-astro
pnpm install
Create a .env file in the root:
# Email Service (Required for contact form)
RESEND_API_KEY=your_resend_api_key
# Tina CMS (Required for cloud hosting)
NEXT_PUBLIC_TINA_CLIENT_ID=your_tina_client_id
TINA_TOKEN=your_tina_token
pnpm run dev
pnpm run build
pnpm run preview
├── public/ # Static assets & Tina Admin output
├── src/
│ ├── actions/ # Astro server actions (contact form)
│ ├── assets/ # Images, SVGs
│ ├── components/ # Astro & Svelte components
│ ├── content/ # Markdown content (managed by Tina)
│ │ ├── profile/ # Personal info & bio
│ │ ├── work/ # Work experience entries
│ │ ├── education/ # Education entries
│ │ ├── projects/ # Portfolio projects
│ │ └── posts/ # Blog posts
│ ├── layouts/ # Page layouts
│ ├── lib/ # Utilities (skills data, etc.)
│ ├── pages/ # Astro routes
│ └── styles/ # Global styles
├── tina/ # Tina CMS configuration & schema
└── astro.config.mjs # Astro configuration
Edit content visually through Tina CMS:
pnpm run dev/admin/index.html| Collection | Description |
|---|---|
| Profile | Name, title, location, social links, bio |
| Work | Job title, company, dates, location, description |
| Education | Degree, school, dates, location |
| Projects | Title, description, screenshot, live/GitHub links, tags |
| Posts | Blog posts with rich text, hero image, tags |
src/lib/skills.ts to update skill categories and itemstina/config.ts to add new fields or collectionssrc/styles/ or component-level stylesOptimized for Vercel with the @astrojs/vercel adapter pre-configured.
MIT