Compare commits

...

59 commits

Author SHA1 Message Date
Ayo
7d0c78c029 chore: delete unused images 2026-03-14 23:00:45 +01:00
Ayo
35bb33cf8f chore: update scripts 2026-03-14 23:00:33 +01:00
Ayo
94cca820ad 1.3.51 2026-03-14 22:46:27 +01:00
Ayo
1867a6bbfd chore: push after deploy 2026-03-14 22:46:19 +01:00
Ayo
0f0fe2232c 1.3.50 2026-03-14 22:03:20 +01:00
Ayo
69a6543de7 feat: add codepen to links 2026-03-14 22:02:59 +01:00
Ayo
106e73fbcc 1.3.49 2026-03-14 20:26:49 +01:00
Ayo
5f6deea201 feat: remove sr.ht from links 2026-03-14 20:26:33 +01:00
Ayo
ed01a40995 1.3.48 2026-03-14 20:17:59 +01:00
Ayo
e7f64fd4a5 feat: set bsky profile to https://bsky.app/profile/ayo.run 2026-03-14 20:17:40 +01:00
Ayo
3d5ec86933 1.3.47 2026-03-07 08:50:50 +01:00
Ayo
da2ffe3bdb feat: link showcase cards to git.ayo.run instead of sr.ht 2026-03-07 08:50:39 +01:00
Ayo
87451a1e58 1.3.46 2026-03-05 19:50:56 +01:00
Ayo
65efc3b5ab feat: add astro reactive to stuff 2026-03-05 19:50:45 +01:00
Ayo
637026f89a 1.3.45 2026-02-26 10:09:50 +01:00
Ayo
be8025d416 feat: use mastodon account note as p-note 2026-02-26 10:09:12 +01:00
Ayo
f986a9f5f0 1.3.44 2026-02-25 22:31:44 +01:00
Ayo
4ca4dbc449 feat: update robots.txt 2026-02-25 22:31:32 +01:00
Ayo
2f4a461b1d 1.3.43 2026-02-25 22:24:41 +01:00
Ayo
36f5dcbde0 feat: update robots.txt to disallow latest AI crawlers 2026-02-25 22:24:27 +01:00
Ayo
d2ffd9ed8a 1.3.42 2026-02-25 20:42:23 +01:00
Ayo
607a7720e5 feat: use mastodon account avatar as og:image 2026-02-25 20:41:52 +01:00
Ayo
634a1d446c 1.3.41 2026-02-25 20:19:44 +01:00
Ayo
48e3acde2f fix: add "px" into style width 2026-02-25 20:19:06 +01:00
Ayo
cf69d45064 1.3.40 2026-02-25 20:07:30 +01:00
Ayo
1d975fdc09 feat: use mastodon account avatar as remote source for astro Picture component 2026-02-25 20:06:32 +01:00
Ayo
d501aadbbb chore: no quiet 2026-02-23 22:50:12 +01:00
Ayo
7004cc7908 chore: no mirror 2026-02-23 22:49:51 +01:00
Ayo
ea081f8228 1.3.39 2026-02-22 21:42:01 +01:00
Ayo
d1ed7f697d chore: update post-commit hook 2026-02-22 21:41:53 +01:00
Ayo
2b3f671400 chore: update post-commit hook 2026-02-22 21:40:34 +01:00
Ayo
9f9a1110ad chore: update post-commit hook 2026-02-22 21:39:42 +01:00
Ayo
0c3c2ae5d9 1.3.38 2026-02-22 21:37:56 +01:00
Ayo
d83fd10ca6 feat: change links order 2026-02-22 21:37:48 +01:00
Ayo
2b553aea71 1.3.37 2026-02-22 21:09:36 +01:00
Ayo
ce9d089dd7 feat: add CV file as public asset 2026-02-22 21:09:19 +01:00
Ayo
d466300ee7 1.3.36 2026-02-22 21:06:29 +01:00
Ayo
a1fc7307c4 feat: update cv link 2026-02-22 21:06:18 +01:00
Ayo
f3a13cbfc5 1.3.35 2026-02-22 19:38:42 +01:00
Ayo
91c8a6e112 feat: update now page content 2026-02-22 19:38:32 +01:00
Ayo
f2d5fea663 1.3.34 2026-02-22 17:44:21 +01:00
Ayo
d0d3875fb9 feat: update now page content 2026-02-22 17:44:12 +01:00
Ayo
2fb93904fe 1.3.33 2026-02-22 16:52:35 +01:00
Ayo
e2b995c44f chore: update now publish state 2026-02-22 16:52:26 +01:00
Ayo
b249c4e820 1.3.32 2026-02-22 15:45:47 +01:00
Ayo
dc871cdea7 feat: udpate now page 2026-02-22 15:45:21 +01:00
Ayo
27b5b29a0b chore: update readme 2026-02-22 15:22:14 +01:00
Ayo
c7a7177d9d chore: show off 2026-02-22 15:20:30 +01:00
Ayo
1e2734dc3a chore: add auto mirror on post-commit hook 2026-02-22 15:17:47 +01:00
Ayo
6dbc9a0257 1.3.31 2026-01-25 19:56:53 +01:00
Ayo
22b192b8ca fix: remove duplicate "previously" post 2026-01-25 19:56:46 +01:00
Ayo
cc2e84f8d3 1.3.30 2026-01-25 19:54:11 +01:00
Ayo
7b26596b0b fix: homepage now link 2026-01-25 19:54:04 +01:00
Ayo
4344aa8a79 1.3.29 2026-01-25 19:52:07 +01:00
Ayo
f54aeb5fcc fix: now page 2026-01-25 19:52:00 +01:00
Ayo
e797e6905a 1.3.28 2026-01-25 19:07:07 +01:00
Ayo
3f0fa83286 chore(deps): update to latest 2026-01-25 19:06:30 +01:00
Ayo
246ec08076 1.3.27 2026-01-05 17:30:22 +01:00
Ayo
381db28b9f feat: use main.elk.zone for masto profile 2026-01-05 17:30:14 +01:00
19 changed files with 2156 additions and 1658 deletions

3
.husky/post-commit Normal file
View file

@ -0,0 +1,3 @@
echo "post-commit..."
git push gh
git push sh

View file

@ -1 +1,2 @@
npx lint-staged echo "pre-commit..."
npx lint-staged

View file

@ -44,6 +44,10 @@ There is a service worker (`src/sw.mjs`) that caches assets on client browsers.
If you want to run build before deploying, do `npm run build:deploy` If you want to run build before deploying, do `npm run build:deploy`
## Auto-mirror to various code forges
The power of git lies within its decentralized nature. I push this project to three different code forges, because I'm paranoid like that. No, I just like to show off. I do this with a post-commit hook that automatically calls `git push <repo> --mirror`, and you can see that in the `.husky/post-commit` file.
--- ---
_Just keep building._<br /> _Just keep building._<br />

View file

@ -11,7 +11,8 @@ import icon from 'astro-icon'
export default defineConfig({ export default defineConfig({
site: 'https://ayo.ayco.io', site: 'https://ayo.ayco.io',
image: { image: {
domains: ['cdn.bsky.app'], domains: ['cdn.bsky.app', 'media.ayco.io'],
remotePatterns: [{ protocol: 'https' }],
}, },
integrations: [ integrations: [
sitemap(), sitemap(),

View file

@ -1,7 +1,7 @@
{ {
"name": "@ayco/personal-website", "name": "@ayco/personal-website",
"type": "module", "type": "module",
"version": "1.3.26", "version": "1.3.51",
"private": true, "private": true,
"scripts": { "scripts": {
"astro": "astro", "astro": "astro",
@ -12,8 +12,8 @@
"lint": "eslint . --config eslint.config.mjs --cache", "lint": "eslint . --config eslint.config.mjs --cache",
"format": "prettier . --write", "format": "prettier . --write",
"check": "npm run format && npm run lint", "check": "npm run format && npm run lint",
"predeploy": "npm version patch && npm run build", "deploy": "eval $(grep '^HOST' .env) && scp -v -r dist ayo@$HOST:~/ayco.io-flask",
"deploy": "npm run predeploy && eval $(grep '^HOST' .env) && scp -r dist ayo@$HOST:~/ayco.io-flask", "patch:build:deploy": "npm run patch && npm run build && npm run deploy",
"build:preview": "npm run build && astro preview", "build:preview": "npm run build && astro preview",
"build:deploy": "npm run build && npm run deploy", "build:deploy": "npm run build && npm run deploy",
"copy:dist": "npm run build && cp -R dist ../ayco.io-flask/", "copy:dist": "npm run build && cp -R dist ../ayco.io-flask/",
@ -23,35 +23,35 @@
"devDependencies": { "devDependencies": {
"@astro-reactive/form": "^0.10.1", "@astro-reactive/form": "^0.10.1",
"@astro-reactive/validator": "^0.5.1", "@astro-reactive/validator": "^0.5.1",
"@astrojs/sitemap": "^3.4.2", "@astrojs/sitemap": "^3.7.0",
"@ayco/astro-sw": "^0.8.14", "@ayco/astro-sw": "^0.8.14",
"@eslint/compat": "^1.3.1", "@eslint/compat": "^2.0.2",
"@eslint/js": "^9.32.0", "@eslint/js": "^10.0.1",
"@iconify-json/mdi": "^1.2.3", "@iconify-json/mdi": "^1.2.3",
"@iconify-json/simple-icons": "^1.2.45", "@iconify-json/simple-icons": "^1.2.71",
"@iconify-json/tabler": "^1.2.20", "@iconify-json/tabler": "^1.2.27",
"@typescript-eslint/parser": "^8.38.0", "@typescript-eslint/parser": "^8.56.0",
"astro": "^5.12.8", "astro": "^5.17.3",
"astro-eslint-parser": "^1.2.2", "astro-eslint-parser": "^1.3.0",
"astro-github-stats": "^0.8.0", "astro-github-stats": "^0.8.0",
"astro-icon": "^1.1.5", "astro-icon": "^1.1.5",
"consola": "^3.4.2", "consola": "^3.4.2",
"eslint": "^9.32.0", "eslint": "^10.0.1",
"eslint-plugin-astro": "^1.3.1", "eslint-plugin-astro": "^1.6.0",
"eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-jsx-a11y": "^6.10.2",
"globals": "^16.3.0", "globals": "^17.3.0",
"husky": "^9.1.7", "husky": "^9.1.7",
"jiti": "^2.5.1", "jiti": "^2.6.1",
"lint-staged": "^16.1.2", "lint-staged": "^16.2.7",
"pathe": "^2.0.3", "pathe": "^2.0.3",
"prettier": "^3.6.2", "prettier": "^3.8.1",
"prettier-plugin-astro": "^0.14.1", "prettier-plugin-astro": "^0.14.1",
"rehype-stringify": "^10.0.1", "rehype-stringify": "^10.0.1",
"remark-parse": "^11.0.0", "remark-parse": "^11.0.0",
"remark-rehype": "^11.1.2", "remark-rehype": "^11.1.2",
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.9.2", "typescript": "^5.9.3",
"typescript-eslint": "^8.38.0", "typescript-eslint": "^8.56.0",
"unified": "^11.0.5" "unified": "^11.0.5"
}, },
"lint-staged": { "lint-staged": {

File diff suppressed because it is too large Load diff

BIN
public/Ayco_Resume.pdf Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View file

@ -1,35 +1,137 @@
Sitemap: https://ayo.ayco.io/sitemap-index.xml Sitemap: https://ayo.ayco.io/sitemap-index.xml
User-agent: * User-agent: AddSearchBot
Disallow: User-agent: AI2Bot
User-agent: AI2Bot-DeepResearchEval
User-agent: AdsBot-Google User-agent: Ai2Bot-Dolma
User-agent: aiHitBot
User-agent: amazon-kendra
User-agent: Amazonbot User-agent: Amazonbot
User-agent: AmazonBuyForMe
User-agent: Amzn-SearchBot
User-agent: Amzn-User
User-agent: Andibot
User-agent: Anomura
User-agent: anthropic-ai User-agent: anthropic-ai
User-agent: Applebot User-agent: Applebot
User-agent: AwarioRssBot User-agent: Applebot-Extended
User-agent: AwarioSmartBot User-agent: atlassian-bot
User-agent: Awario
User-agent: AzureAI-SearchBot
User-agent: bedrockbot
User-agent: bigsur.ai
User-agent: Bravebot
User-agent: Brightbot 1.0
User-agent: BuddyBot
User-agent: Bytespider User-agent: Bytespider
User-agent: CCBot User-agent: CCBot
User-agent: Channel3Bot
User-agent: ChatGLM-Spider
User-agent: ChatGPT Agent
User-agent: ChatGPT-User User-agent: ChatGPT-User
User-agent: ClaudeBot User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: Claude-Web User-agent: Claude-Web
User-agent: ClaudeBot
User-agent: Cloudflare-AutoRAG
User-agent: CloudVertexBot
User-agent: cohere-ai User-agent: cohere-ai
User-agent: DataForSeoBot User-agent: cohere-training-data-crawler
User-agent: Cotoyogi
User-agent: Crawl4AI
User-agent: Crawlspace
User-agent: Datenbank Crawler
User-agent: DeepSeekBot
User-agent: Devin
User-agent: Diffbot
User-agent: DuckAssistBot
User-agent: Echobot Bot
User-agent: EchoboxBot
User-agent: FacebookBot User-agent: FacebookBot
User-agent: facebookexternalhit
User-agent: Factset_spyderbot
User-agent: FirecrawlAgent
User-agent: FriendlyCrawler User-agent: FriendlyCrawler
User-agent: Gemini-Deep-Research
User-agent: Google-CloudVertexBot
User-agent: Google-Extended User-agent: Google-Extended
User-agent: Google-Firebase
User-agent: Google-NotebookLM
User-agent: GoogleAgent-Mariner
User-agent: GoogleOther User-agent: GoogleOther
User-agent: GoogleOther-Image
User-agent: GoogleOther-Video
User-agent: GPTBot User-agent: GPTBot
User-agent: iAskBot
User-agent: iaskspider
User-agent: iaskspider/2.0
User-agent: IbouBot
User-agent: ICC-Crawler
User-agent: ImagesiftBot User-agent: ImagesiftBot
User-agent: magpie-crawler User-agent: imageSpider
User-agent: Meltwater User-agent: img2dataset
User-agent: ISSCyberRiskCrawler
User-agent: kagi-fetcher
User-agent: Kangaroo Bot
User-agent: KlaviyoAIBot
User-agent: KunatoCrawler
User-agent: laion-huggingface-processor
User-agent: LAIONDownloader
User-agent: LCC
User-agent: LinerBot
User-agent: Linguee Bot
User-agent: LinkupBot
User-agent: Manus-User
User-agent: meta-externalagent
User-agent: Meta-ExternalAgent
User-agent: meta-externalfetcher
User-agent: Meta-ExternalFetcher
User-agent: meta-webindexer
User-agent: MistralAI-User
User-agent: MistralAI-User/1.0
User-agent: MyCentralAIScraperBot
User-agent: netEstate Imprint Crawler
User-agent: NotebookLM
User-agent: NovaAct
User-agent: OAI-SearchBot
User-agent: omgili User-agent: omgili
User-agent: omgilibot User-agent: omgilibot
User-agent: peer39_crawler User-agent: OpenAI
User-agent: peer39_crawler/1.0 User-agent: Operator
User-agent: PanguBot
User-agent: Panscient
User-agent: panscient.com
User-agent: Perplexity-User
User-agent: PerplexityBot User-agent: PerplexityBot
User-agent: PiplBot User-agent: PetalBot
User-agent: Seekr User-agent: PhindBot
User-agent: Poggio-Citations
User-agent: Poseidon Research Crawler
User-agent: QualifiedBot
User-agent: QuillBot
User-agent: quillbot.com
User-agent: SBIntuitionsBot
User-agent: Scrapy
User-agent: SemrushBot-OCOB
User-agent: SemrushBot-SWA
User-agent: ShapBot
User-agent: Sidetrade indexer bot
User-agent: Spider
User-agent: TavilyBot
User-agent: TerraCotta
User-agent: Thinkbot
User-agent: TikTokSpider
User-agent: Timpibot
User-agent: TwinAgent
User-agent: VelenPublicWebCrawler
User-agent: WARDBot
User-agent: Webzio-Extended
User-agent: webzio-extended
User-agent: wpbot
User-agent: WRTNBot
User-agent: YaK
User-agent: YandexAdditional
User-agent: YandexAdditionalBot
User-agent: YouBot User-agent: YouBot
User-agent: ZanistaBot
Disallow: / Disallow: /

Binary file not shown.

Before

Width:  |  Height:  |  Size: 504 KiB

View file

@ -3,17 +3,20 @@ export interface Props {
title?: string | undefined title?: string | undefined
description?: string | undefined description?: string | undefined
ogImage?: string | undefined ogImage?: string | undefined
ogFileType?: string | undefined
} }
const defaultDescription = const defaultDescription =
'Professional software engineer specializing in web development with a decade of experience building web applications for both private businesses and government-funded high-impact projects utilizing web technologies, IoT, data viz/insights, remote sensing, and GIS' 'Professional software engineer specializing in web development with a decade of experience building web applications for both private businesses and government-funded high-impact projects utilizing web technologies, IoT, data viz/insights, remote sensing, and GIS'
const defaultTitle = 'Ayo Ayco - Tech Leader, Software Engineer, Web Developer' const defaultTitle = 'Ayo Ayco - Tech Leader, Software Engineer, Web Developer'
const defaultOgImage = 'ayo.png' const defaultOgImage = 'ayo.png'
const defaultOgFileType = 'image/png'
let { let {
title, title,
description = defaultDescription, description = defaultDescription,
ogImage = defaultOgImage, ogImage = defaultOgImage,
ogFileType = defaultOgFileType,
} = Astro.props } = Astro.props
const baseURL = Astro.site?.toString().slice(0, -1) // ?? 'https://ayo.ayco.io' const baseURL = Astro.site?.toString().slice(0, -1) // ?? 'https://ayo.ayco.io'
@ -35,7 +38,8 @@ const baseURL = Astro.site?.toString().slice(0, -1) // ?? 'https://ayo.ayco.io'
<meta property="og:url" content={baseURL + Astro.url.pathname} /> <meta property="og:url" content={baseURL + Astro.url.pathname} />
<meta property="og:title" content={title} /> <meta property="og:title" content={title} />
<meta property="og:description" content={description} /> <meta property="og:description" content={description} />
<meta property="og:image" content={`/${ogImage}`} /> <meta property="og:image:type" content={ogFileType} />
<meta property="og:image" content={ogImage} />
<!-- Links --> <!-- Links -->
<link rel="canonical" href={baseURL + Astro.url.pathname} /> <link rel="canonical" href={baseURL + Astro.url.pathname} />

View file

@ -46,25 +46,30 @@ export const footerLinks: Link[] = [
icon: 'git', icon: 'git',
}, },
{ {
text: 'SourceHut', text: 'GitHub',
url: 'https://sr.ht/~ayoayco', url: 'https://github.com/ayo-run',
icon: 'sourcehut', icon: 'github',
},
{
text: 'CodePen',
url: 'https://codepen.io/ayo-run',
icon: 'codepen',
}, },
{ {
text: 'Mastodon', text: 'Mastodon',
url: 'https://elk.zone/social.ayco.io/@ayo', url: 'https://main.elk.zone/social.ayco.io/@ayo',
icon: 'mastodon', icon: 'mastodon',
}, },
{
text: 'Bluesky',
url: 'http://bsky.app/profile/ayo.run',
icon: 'bluesky',
},
{ {
text: 'Pixelfed', text: 'Pixelfed',
url: 'https://metapixl.com/@ayo', url: 'https://metapixl.com/@ayo',
icon: 'pixelfed', icon: 'pixelfed',
}, },
{
text: 'Bluesky',
url: 'http://bsky.app/profile/ayo.ayco.io',
icon: 'bluesky',
},
{ {
text: 'Instagram', text: 'Instagram',
url: 'https://www.instagram.com/ayoayco/', url: 'https://www.instagram.com/ayoayco/',
@ -75,11 +80,6 @@ export const footerLinks: Link[] = [
url: 'https://www.linkedin.com/in/ayoayco/', url: 'https://www.linkedin.com/in/ayoayco/',
icon: 'linkedin', icon: 'linkedin',
}, },
{
text: 'GitHub',
url: 'https://ayco.io/gh',
icon: 'github',
},
] ]
export const socialLinks: Link[] = [ export const socialLinks: Link[] = [

View file

@ -1,7 +1,7 @@
{ {
"title": "", "title": "BACK AT IT",
"description": "", "description": "",
"publishDate": "2025-10-18", "publishDate": "2026-02-22",
"publishedOn": "", "publishedOn": "the 22nd day of February 2026",
"publishState": "" "publishState": ""
} }

View file

@ -0,0 +1,9 @@
Hello! Been a while!
Yes, I'm getting back to some of my shelved side projects like <a href="https://github.com/ayoayco/mcfly#readme">McFly</a> and <a href="https://github.com/ayoayco/astro-sw#readme">Astro SW</a>.
Why were they shelved, you ask?
Well, that's a story for another time.
You can <a href="https://github.com/ayoayco">Follow me on GitHub</a> to see my activities on these projects if that's your thing. :)

View file

@ -8,15 +8,34 @@ import { links } from '../constants/links'
export interface Props { export interface Props {
title?: string title?: string
description?: string description?: string
ogImage?: string
} }
const { title, description, ogImage } = Astro.props const { title, description } = Astro.props
import { getImage } from 'astro:assets'
// fetch mastodon account
const response = await fetch(
'https://social.ayco.io/api/v1/accounts/lookup?acct=ayo'
)
const data = await response.json()
const { avatar } = data
const ogImage = await getImage({
src: avatar,
width: 400,
height: 400,
format: 'png',
})
const ogFileType = 'image/png'
--- ---
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<Head title={title} description={description} ogImage={ogImage} /> <Head
title={title}
description={description}
ogImage={ogImage.src}
ogFileType={ogFileType}
/>
<body class="h-card"> <body class="h-card">
<Nav links={links} /> <Nav links={links} />

View file

@ -2,7 +2,17 @@
import Layout from '../layouts/Layout.astro' import Layout from '../layouts/Layout.astro'
import Card from '../components/Card.astro' import Card from '../components/Card.astro'
import Footer from '../components/Footer.astro' import Footer from '../components/Footer.astro'
// import now from '../constants/now.json' import now from '../constants/now.json'
import { Picture } from 'astro:assets'
// fetch mastodon account
const response = await fetch(
'https://social.ayco.io/api/v1/accounts/lookup?acct=ayo'
)
const data = await response.json()
const { avatar, note } = data
const avatarSize = 150
--- ---
<Layout> <Layout>
@ -12,28 +22,25 @@ import Footer from '../components/Footer.astro'
<!-- h-card details --> <!-- h-card details -->
<span class="p-name">Ayo Ayco</span> <span class="p-name">Ayo Ayco</span>
<a class="u-url u-uid" href="https://ayo.ayco.io">w</a>, <a class="u-url u-uid" href="https://ayo.ayco.io">w</a>,
<p class="p-note"> <section class="p-note" set:html={note} />
Frontend guy who likes server adventures & works w/ linux. Looking to
specialize in web perf, but mostly feels like an impostor for now. Has
hobby projects.
</p>
</div> </div>
<img <Picture
class="u-photo highlighted-section__content__profile-picture" class="u-photo highlighted-section__content__profile-picture"
alt="Ayo Ayco's avatar" alt="Ayo Ayco's avatar"
src="/ayo-2025-sm.png" formats={['avif', 'webp']}
width="140" src={avatar}
height="140" width={avatarSize}
height={avatarSize}
/> />
<div class="highlighted-section__content__text"> <div class="highlighted-section__content__text">
<h1 title="Ayo Ayco | Software Engineer + Web Developer"> <h1 title="Ayo Ayco | Software Engineer + Web Developer">
Hi, I'm <span class="heavy-text">Ayo</span>! Hi, I'm <span class="heavy-text">Ayo</span>!
</h1> </h1>
<!--a href="https://forms.ayo.run/form/tnz7FybY" class="now-wrapper"--> <!--a href="https://forms.ayo.run/form/tnz7FybY" class="now-wrapper"-->
<!--a href="/now" class="now-wrapper"> <a href="/now" class="now-wrapper">
<span class="now-label">now</span> <span class="now-label">now</span>
<span class="status">{now.title}</span> <span class="status">{now.title}</span>
</a--> </a>
</div> </div>
</div> </div>
</section> </section>
@ -57,7 +64,7 @@ import Footer from '../components/Footer.astro'
/> />
<Card <Card
newTab={true} newTab={true}
href="https://ayco.io/cv" href="/Ayco_Resume.pdf"
title="CV / Resume" title="CV / Resume"
body="Download and peruse my skills and experience" body="Download and peruse my skills and experience"
/> />
@ -67,7 +74,7 @@ import Footer from '../components/Footer.astro'
<Footer /> <Footer />
</Layout> </Layout>
<style> <style define:vars={{ avatarSize }}>
h1 { h1 {
margin: 0; margin: 0;
color: rgba(255, 255, 255, 0.75); color: rgba(255, 255, 255, 0.75);
@ -125,8 +132,8 @@ import Footer from '../components/Footer.astro'
background-color: var(--color-brand-blue-1); background-color: var(--color-brand-blue-1);
display: block; display: block;
border-radius: 50%; border-radius: 50%;
width: 140px; width: var(--avatarSize) px;
height: 140px; height: var(--avatarSize) px;
} }
.highlighted-section__content ul a { .highlighted-section__content ul a {

View file

@ -30,7 +30,7 @@ import Card from '../components/Card.astro'
/> />
<Card <Card
newTab newTab
href="https://ayco.io/sh/astro-sw#readme" href="https://git.ayo.run/ayo/astro-sw#readme"
title="Astro SW" title="Astro SW"
body="Integration to use your service worker with Astro" body="Integration to use your service worker with Astro"
/> />
@ -42,15 +42,15 @@ import Card from '../components/Card.astro'
/> />
<Card <Card
newTab newTab
href="https://ayco.io/sh/astro-resume#readme" href="https://git.ayo.run/ayo/astro-resume#readme"
title="Astro Resume" title="Astro Resume"
body="Utilities for serializing data from server for use in the client with types preserved across components." body="Utilities for serializing data from server for use in the client with types preserved across components."
/> />
<Card <Card
newTab newTab
href="https://ayco.io/n/generate-timezone-json" href="https://astro-reactive.js.org"
title="Time Zone JSON Generator" title="Astro Reactive"
body="Generate a JSON file containing time zones from the official IANA Database or your own zone.tab file" body="Let your Data build your UI with Astro components 🔥"
/> />
<Card <Card
newTab newTab
@ -58,6 +58,12 @@ import Card from '../components/Card.astro'
title="Cozy 🧸" title="Cozy 🧸"
body="Your modern-day reading assistant" body="Your modern-day reading assistant"
/> />
<Card
newTab
href="https://ayco.io/n/generate-timezone-json"
title="Time Zone JSON Generator"
body="Generate a JSON file containing time zones from the official IANA Database or your own zone.tab file"
/>
<Card <Card
newTab newTab
href="https://kaboom.ayco.io" href="https://kaboom.ayco.io"
@ -70,11 +76,6 @@ import Card from '../components/Card.astro'
title="Minesweeper" title="Minesweeper"
body="Recreated the classic game for the web 💣" body="Recreated the classic game for the web 💣"
/> />
<Card
href="/showcase/astro-reactive-form"
title="Reactive Form"
body="The reactive form component for Astro 🔥"
/>
</ul> </ul>
</main> </main>
<Footer /> <Footer />