Build your digital business card
Starcard is an Astro template: configure everything in your astro.config.mjs and deploy.
Getting Started
Clone or use the template, then configure via astro.config.mjs.
Quick Setup
- 1 Use the GitHub template or clone your repo
- 2 Install dependencies:
pnpm install - 3 Edit
astro.config.mjsand update the Starcard integration options - 4 Run
pnpm devto preview locally - 5 Deploy (Vercel, Netlify, GitHub Pages, etc.)
Full astro.config.mjs example
import { defineConfig } from "astro/config";
import sitemap from "@astrojs/sitemap";
import starcard from "./src/integrations/starcard.js";
export default defineConfig({
site: "https://example.com",
integrations: [
sitemap(),
starcard({
meta: {
title: "Ava Thompson",
description: "Product Designer & Frontend Developer",
keywords: ["profile", "vcard", "portfolio", "links"],
favicon: "/favicon.svg",
},
footer: { text: "© 2025 Ava Thompson" },
profile: {
displayName: "Ava Thompson",
firstName: "Ava",
middleName: "L.",
lastName: "Thompson",
title: "Senior Product Designer",
company: "Studio North",
companyUrl: "https://studionorth.example",
avatarUrl: "https://avatars.githubusercontent.com/u/9919?v=4",
avatarRounded: "full",
email: "[email protected]",
phone: "+1 415 555 0199",
homePage: "https://ava.design",
location: "San Francisco, USA",
vcard: true,
sections: [
{
order: 1,
id: "socials",
title: "Socials",
icon: "share",
items: [
{ id: "github", icon: "github", url: "https://github.com/ava" },
{ id: "linkedin", icon: "linkedin", url: "https://www.linkedin.com/in/ava" },
{ id: "x", icon: "x", url: "https://x.com/ava" },
],
},
{
order: 2,
id: "presence",
title: "Presence",
icon: "globe",
items: [
{ id: "website", icon: "icloud", url: "https://ava.design" },
{ id: "youtube", icon: "youtube", url: "https://www.youtube.com/@ava" },
],
},
{
order: 3,
id: "support",
title: "Support",
icon: "buymeacoffee",
items: [
{ id: "bmac", icon: "buymeacoffee", url: "https://buymeacoffee.com/ava" },
],
},
],
},
}),
],
}); How it works
Minimal business card layout with smart link sharing.
Mobile behavior
Tapping any link opens a QR dialog so others can scan the link easily. There is also a link to show a QR code that generates a vCard for quick “Add to Contacts”. Each link has its own auto‑generated QR code.
Desktop behavior
Clicking a link opens it in a new tab. Hold Option/Alt or Ctrl while clicking to show the same QR dialog as on mobile.
Sections & items
Add multiple sections (e.g., Multimedia, Social, Presence). Each section and item supports an icon and a url. Use order to control display order.
Icons
Icons use Iconify’s Simple Icons set. Set icon to a Simple Icons name like github, linkedin, x, bluesky, substack, mastodon.
Icon Library
Starcard uses Iconify’s Simple Icons set for brands.
How to choose icons
- Open Iconify – Simple Icons
- Search for your brand and copy the name (e.g., github, linkedin)
- Use the name in your config under icon
Notes
- Names are lowercase; some aliases exist (e.g., twitter → x)
- Section icon and each item icon can differ
- Icons render server-side; no extra setup required
Configuration Reference
All options live in the Starcard integration inside your Astro config.
Meta & Footer
| Path | Type | Description |
|---|---|---|
| meta.title | string | Document title and site branding |
| meta.description | string | SEO description |
| meta.keywords | string[] | SEO keywords |
| meta.favicon | string | Path to favicon |
| footer.text | string | Footer copyright text |
Profile
| Field | Type | Required | Description |
|---|---|---|---|
| displayName | string | yes | Primary name shown on the card |
| firstName | string | yes | Given name (used for vCard) |
| middleName | string | no | Middle name(s) |
| lastName | string | yes | Family name (used for vCard) |
| title | string | no | Role or tagline |
| company | string | no | Organization name |
| companyUrl | string (url) | no | Link to organization |
| avatarUrl | string (url) | no | Photo URL |
| avatarRounded | "none" | "sm" | "md" | "lg" | "xl" | "full" | no | Avatar border radius preset |
| string (email) | no | Contact email | |
| phone | string | no | Contact phone number |
| homePage | string (url) | no | Personal website URL |
| location | string | no | City, Country |
| vcard | boolean | no | Enable vCard QR link |
| sections | Section[] | no | Configurable content groups |
Section
| Field | Type | Required | Description |
|---|---|---|---|
| order | number | no | Sort order (ascending) |
| id | string | no | Identifier (e.g., "socials") |
| title | string | no | Section title |
| icon | string | no | Iconify Simple Icons name |
| items | SectionItem[] | no | Links inside the section |
SectionItem
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | no | Identifier for the item |
| icon | string | no | Iconify Simple Icons name |
| url | string (url) | no | Target URL (QR is auto-generated) |
Sections & Items
sections: [
{
order: 1,
id: "socials",
title: "Socials",
icon: "social",
items: [
{ id: "github", icon: "github", url: "https://github.com/you" },
{ id: "bluesky", icon: "bluesky", url: "https://bsky.app/profile/you" },
{ id: "x", icon: "x", url: "https://x.com/you" },
],
},
{
order: 2,
id: "presence",
title: "Presence",
icon: "globe",
items: [
{ id: "website", icon: "icloud", url: "https://example.com" },
{ id: "youtube", icon: "youtube", url: "https://www.youtube.com/@your-channel" },
],
},
]; Icons use Iconify Simple Icons. Browse names at Iconify – Simple Icons.
Tips & Best Practices
Keep config simple; sharing is one tap or one scan away.
Fast sharing
On touch devices, links show QR codes by default. On desktop, hold Option/Alt or Ctrl to show QR instead of opening a tab.
vCard
Enable profile.vcard to show a QR that encodes a vCard, so people can add you to Contacts instantly.
Icons
Prefer official brand names from Simple Icons. A few aliases are supported (e.g., twitter → x).