"use client"; import { ArrowUpRight, BookOpenText, FileText, Presentation, BookOpen, } from "lucide-react"; import Link from "next/link"; import { useEffect, useState } from "react"; import { Badge } from "~/components/ui/badge"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "~/components/ui/card"; import { Skeleton } from "~/components/ui/skeleton"; import { CardSkeleton } from "~/components/ui/skeletons"; import type { Publication } from "~/lib/bibtex"; import { parseBibtex } from "~/lib/bibtex"; export default function PublicationsPage() { const [publications, setPublications] = useState([]); const [loading, setLoading] = useState(true); const tagsToStrip = ["paperUrl", "posterUrl"]; useEffect(() => { fetch("/publications.bib") .then((res) => res.text()) .then((text) => { const pubs = parseBibtex(text); setPublications(pubs); setLoading(false); }); }, []); const downloadBibtex = (pub: Publication) => { const { title, authors, venue, year, doi, abstract, type, citationType, citationKey, } = pub; let bibtexEntry = `@${citationType}{${citationKey},\n`; bibtexEntry += ` title = {${title}},\n`; bibtexEntry += ` author = {${authors.join(" and ")}},\n`; bibtexEntry += ` year = {${year}},\n`; if (type === "conference" || type === "workshop") { bibtexEntry += ` organization = {${venue}},\n`; } else if (type === "journal") { bibtexEntry += ` journal = {${venue}},\n`; } else if (type === "thesis") { bibtexEntry += ` school = {${venue}},\n`; } if (doi) { bibtexEntry += ` doi = {${doi}},\n`; } if (abstract) { bibtexEntry += ` abstract = {${abstract}},\n`; } bibtexEntry += `}\n`; const blob = new Blob([bibtexEntry], { type: "text/plain" }); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = `${citationKey}.bib`; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); }; return (

Peer-Reviewed Publications

My research publications in human-robot interaction and robotics.

{loading ? ( <> ) : ( publications.map((pub, index) => (
{pub.title} {pub.paperUrl && ( )}
{pub.authors.join(", ")} {pub.venue} ({pub.year}) {pub.address && ( {pub.address} )} {pub.notes && (
{pub.notes}
)}
{pub.abstract && (

{pub.abstract}

)}
{pub.type} {pub.doi && ( DOI )} {pub.paperUrl && ( Paper )} {pub.posterUrl && ( Poster )} downloadBibtex(pub)} className="cursor-pointer capitalize" variant="secondary" > BibTeX
)) )}
); }