SPB Git

spb/spboucher.ai Public

spboucher.ai — personal website of Simon-Pierre Boucher.

TypeScript 93.4% HTML 5.5% CSS 1%
7.1 KB · 212 lines tsx
Raw Blame History
1/*2  page.tsx3  spboucher.ai Web4  Author: Simon-Pierre Boucher5  Mail: contact@spboucher.ai6*/78import type { Metadata } from "next";9import {10  AtSign,11  Briefcase,12  Download,13  Github,14  GraduationCap,15  Languages,16  Mail,17  MapPin,18} from "lucide-react";1920import { Badge } from "@/components/ui/badge";21import { buttonVariants } from "@/components/ui/button";22import {23  Card,24  CardContent,25  CardDescription,26  CardHeader,27  CardTitle,28} from "@/components/ui/card";29import { IconTile } from "@/components/icon-tile";30import { Reveal } from "@/components/reveal";31import { SectionHeading } from "@/components/section-heading";3233export const metadata: Metadata = {34  title: "CV",35  description:36    "CV summary and contact information for Simon-Pierre Boucher — Professor, Department of Administrative Sciences, Université du Québec en Outaouais (UQO).",37};3839const positions = [40  {41    role: "Professor — Department of Administrative Sciences",42    org: "Université du Québec en Outaouais (UQO), Gatineau",43    period: "Present",44  },45  {46    role: "Lecturer",47    org: "Université Laval",48    period: "2021–Present",49  },50  {51    role: "Teaching Assistant",52    org: "Université Laval",53    period: "2018–2021",54  },55];5657const education = [58  {59    degree: "Ph.D. in Business Administration (Finance and Insurance)",60    school: "Université Laval",61    period: "2020–Present",62  },63  {64    degree: "M.Sc. in Business Administration (Finance)",65    school: "Université Laval",66    period: "2017–2019",67  },68  {69    degree: "B.B.A. in Business Administration (Finance)",70    school: "Université Laval",71    period: "2013–2017",72  },73];7475export default function CvPage() {76  return (77    <div className="mx-auto max-w-5xl px-4 py-16 sm:px-6">78      <Reveal>79        <SectionHeading80          as="h1"81          eyebrow="Curriculum Vitae"82          title="CV"83          icon={Briefcase}84          description="Professor in the Department of Administrative Sciences at Université du Québec en Outaouais (UQO). Research in financial econometrics, commodity markets, monetary policy announcements, high-frequency finance, volatility modelling, textual analysis, and financialization."85        />86      </Reveal>8788      {/* Download */}89      <Reveal delay={0.08} className="mt-8">90        <div className="flex flex-col gap-5 border-y-2 border-foreground bg-card/50 p-6 sm:flex-row sm:items-center sm:justify-between sm:p-7">91          <div className="min-w-0">92            <h2 className="font-display text-base font-semibold tracking-tight">93              Full Curriculum Vitae94            </h2>95            <p className="mt-1.5 max-w-md text-sm leading-relaxed text-muted-foreground">96              Complete 4-page PDF — positions, education, research &amp; working97              papers, detailed teaching, applications, and skills.98            </p>99          </div>100          <a101            href="/cv/Simon-Pierre-Boucher-CV.pdf"102            download103            className={`${buttonVariants()} shrink-0`}104          >105            <Download aria-hidden="true" />106            Download CV (PDF)107          </a>108        </div>109      </Reveal>110111      {/* Contact */}112      <section className="mt-12">113        <Reveal>114          <SectionHeading title="Contact" icon={AtSign} />115          <Card className="mt-4">116            <CardContent className="grid gap-3 p-6 text-sm sm:grid-cols-2">117              <a118                href="mailto:simon-pierre.boucher@uqo.ca"119                className="inline-flex items-center gap-3 rounded-2xl border border-border/50 bg-muted/40 px-4 py-3 text-muted-foreground transition-all hover:-translate-y-px hover:border-primary/30 hover:text-foreground"120              >121                <IconTile icon={Mail} size="sm" />122                simon-pierre.boucher@uqo.ca (academic)123              </a>124              <a125                href="mailto:contact@spboucher.ai"126                className="inline-flex items-center gap-3 rounded-2xl border border-border/50 bg-muted/40 px-4 py-3 text-muted-foreground transition-all hover:-translate-y-px hover:border-primary/30 hover:text-foreground"127              >128                <IconTile icon={Mail} size="sm" />129                contact@spboucher.ai (personal)130              </a>131              <a132                href="https://git.spboucher.ai"133                target="_blank"134                rel="noopener noreferrer"135                className="inline-flex items-center gap-3 rounded-2xl border border-border/50 bg-muted/40 px-4 py-3 text-muted-foreground transition-all hover:-translate-y-px hover:border-primary/30 hover:text-foreground"136              >137                <IconTile icon={Github} size="sm" />138                git.spboucher.ai139              </a>140              <span className="inline-flex items-center gap-3 rounded-2xl border border-border/50 bg-muted/40 px-4 py-3 text-muted-foreground">141                <IconTile icon={MapPin} size="sm" />142                UQO, Gatineau — Pavillon Alexandre-Taché143              </span>144            </CardContent>145          </Card>146        </Reveal>147      </section>148149      {/* Positions */}150      <section className="mt-12">151        <Reveal>152          <SectionHeading title="Positions" icon={Briefcase} />153        </Reveal>154        <div className="mt-4 space-y-4">155          {positions.map((p, i) => (156            <Reveal key={p.role} delay={i * 0.06}>157              <Card>158                <CardHeader className="flex-row items-start justify-between space-y-0">159                  <div>160                    <CardTitle className="text-base leading-snug">161                      {p.role}162                    </CardTitle>163                    <CardDescription className="mt-1">{p.org}</CardDescription>164                  </div>165                  <Badge variant="outline">{p.period}</Badge>166                </CardHeader>167              </Card>168            </Reveal>169          ))}170        </div>171      </section>172173      {/* Education */}174      <section className="mt-12">175        <Reveal>176          <SectionHeading title="Education" icon={GraduationCap} />177        </Reveal>178        <div className="mt-4 space-y-4">179          {education.map((item, i) => (180            <Reveal key={item.degree} delay={i * 0.06}>181              <Card>182                <CardHeader className="flex-row items-start justify-between space-y-0">183                  <div>184                    <CardTitle className="text-base leading-snug">185                      {item.degree}186                    </CardTitle>187                    <CardDescription className="mt-1">188                      {item.school}189                    </CardDescription>190                  </div>191                  <Badge variant="outline">{item.period}</Badge>192                </CardHeader>193              </Card>194            </Reveal>195          ))}196        </div>197      </section>198199      {/* Languages */}200      <section className="mt-12">201        <Reveal>202          <SectionHeading title="Languages" icon={Languages} />203          <div className="mt-4 flex gap-2">204            <Badge variant="secondary">French — Bilingual</Badge>205            <Badge variant="secondary">English — Bilingual</Badge>206          </div>207        </Reveal>208      </section>209    </div>210  );211}212