--- import { type CollectionEntry, getCollection } from "astro:content"; import PostPreview from "@/components/blog/PostPreview.astro"; import Project from "@/components/project/Project.astro"; import { getAllPosts } from "@/data/post"; import { getAllSpeaking } from "@/data/speaking"; import PageLayout from "@/layouts/Base.astro"; import { socialLinks } from "@/site.config"; import { getTagIndex, getTaggedCollections } from "@/data/tags"; import { collectionDateSort, projectDateSort } from "@/utils/date"; import { personSchema, websiteSchema } from "@/utils/seo"; const MAX_POSTS = 4; const allPosts = await getAllPosts(); const latestPosts = (allPosts.sort(collectionDateSort) as CollectionEntry<"writing">[]).slice( 0, MAX_POSTS, ); const MAX_PROJECTS = 3; const allProjects = await getCollection("projects"); const latestProjects = allProjects.sort(projectDateSort).slice(0, MAX_PROJECTS); const talks = (await getAllSpeaking()).sort(collectionDateSort); const social = Object.fromEntries(socialLinks.map((s) => [s.friendlyName, s.link])); // Skills (from all tagged content) feed the Person `knowsAbout` signal. const skills = [...getTagIndex(await getTaggedCollections()).values()].map((t) => t.label); const meta = { title: "Engineer & Founder", description: "Prad Nukala โ€” engineer and founder building decentralized identity infrastructure. Explore my projects, experience, writing, and talks.", schema: [websiteSchema(), personSchema(skills)], }; ---

Hello World

Engineer and founder. I build decentralized identity infrastructure and tools for developers. Here you'll find what I've built, where I've worked, what I write, and the talks I've given.

Find me on Github, X, LinkedIn, or contact me directly.

{ latestProjects.length > 0 && (

Projects

See all projects
) }

Writing

See all writing
{ talks.length > 0 && (

Speaking

) }