diff --git a/apps/portal/public/test_resume.pdf b/apps/portal/public/test_resume.pdf deleted file mode 100644 index 279b6a25..00000000 Binary files a/apps/portal/public/test_resume.pdf and /dev/null differ diff --git a/apps/portal/src/components/resumes/landing/Button.jsx b/apps/portal/src/components/resumes/landing/Button.jsx new file mode 100644 index 00000000..9d8c3ecc --- /dev/null +++ b/apps/portal/src/components/resumes/landing/Button.jsx @@ -0,0 +1,45 @@ +import clsx from 'clsx'; +import Link from 'next/link'; + +const baseStyles = { + outline: + 'group inline-flex ring-1 items-center justify-center rounded-full py-2 px-4 text-sm focus:outline-none', + solid: + 'group inline-flex items-center justify-center rounded-full py-2 px-4 text-sm font-semibold focus:outline-none focus-visible:outline-2 focus-visible:outline-offset-2', +}; + +const variantStyles = { + outline: { + slate: + 'ring-slate-200 text-slate-700 hover:text-slate-900 hover:ring-slate-300 active:bg-slate-100 active:text-slate-600 focus-visible:outline-blue-600 focus-visible:ring-slate-300', + white: + 'ring-slate-700 text-white hover:ring-slate-500 active:ring-slate-700 active:text-slate-400 focus-visible:outline-white', + }, + solid: { + blue: 'bg-blue-600 text-white hover:text-slate-100 hover:bg-blue-500 active:bg-blue-800 active:text-blue-100 focus-visible:outline-blue-600', + slate: + 'bg-slate-900 text-white hover:bg-slate-700 hover:text-slate-100 active:bg-slate-800 active:text-slate-300 focus-visible:outline-slate-900', + white: + 'bg-white text-slate-900 hover:bg-blue-50 active:bg-blue-200 active:text-slate-600 focus-visible:outline-white', + }, +}; + +export function Button({ + variant = 'solid', + color = 'slate', + className, + href, + ...props +}) { + className = clsx( + baseStyles[variant], + variantStyles[variant][color], + className, + ); + + return href ? ( + + ) : ( + + + + + ); +} diff --git a/apps/portal/src/components/resumes/landing/Container.jsx b/apps/portal/src/components/resumes/landing/Container.jsx new file mode 100644 index 00000000..a17ea3c1 --- /dev/null +++ b/apps/portal/src/components/resumes/landing/Container.jsx @@ -0,0 +1,10 @@ +import clsx from 'clsx' + +export function Container({ className, ...props }) { + return ( +
+ ) +} diff --git a/apps/portal/src/components/resumes/landing/Footer.jsx b/apps/portal/src/components/resumes/landing/Footer.jsx new file mode 100644 index 00000000..d9f83e2c --- /dev/null +++ b/apps/portal/src/components/resumes/landing/Footer.jsx @@ -0,0 +1,50 @@ +import Link from 'next/link'; + +import { Container } from './Container'; +import { Logo } from './Logo'; + +export function Footer() { + return ( + + ); +} diff --git a/apps/portal/src/components/resumes/landing/Hero.jsx b/apps/portal/src/components/resumes/landing/Hero.jsx new file mode 100644 index 00000000..192b6562 --- /dev/null +++ b/apps/portal/src/components/resumes/landing/Hero.jsx @@ -0,0 +1,73 @@ +import Image from 'next/future/image'; +import Link from 'next/link'; + +import { Button } from './Button'; +import { Container } from './Container'; +import logoLaravel from './images/logos/laravel.svg'; +import logoMirage from './images/logos/mirage.svg'; +import logoStatamic from './images/logos/statamic.svg'; +import logoStaticKit from './images/logos/statickit.svg'; +import logoTransistor from './images/logos/transistor.svg'; +import logoTuple from './images/logos/tuple.svg'; + +export function Hero() { + return ( + +

+ Resume review{' '} + + + made simple + {' '} + for software engineers. +

+

+ Get valuable feedback from the public or checkout reviewed resumes from + your fellow engineers +

+
+ + + + + + +
+
+

+ Resumes reviewed from engineers from these companies so far +

+
    + {[ + { logo: logoTransistor, name: 'Apple' }, + { logo: logoTuple, name: 'Meta' }, + { logo: logoStaticKit, name: 'Google' }, + + { logo: logoMirage, name: 'Mirage' }, + { logo: logoLaravel, name: 'Laravel' }, + { logo: logoStatamic, name: 'Statamic' }, + ].map((company) => ( +
  • + {company.name} +
  • + ))} +
+
+
+ ); +} diff --git a/apps/portal/src/components/resumes/landing/Logo.jsx b/apps/portal/src/components/resumes/landing/Logo.jsx new file mode 100644 index 00000000..230baceb --- /dev/null +++ b/apps/portal/src/components/resumes/landing/Logo.jsx @@ -0,0 +1,32 @@ +export function Logo(props) { + return ( + + ); +} diff --git a/apps/portal/src/components/resumes/landing/PrimaryFeatures.jsx b/apps/portal/src/components/resumes/landing/PrimaryFeatures.jsx new file mode 100644 index 00000000..15d1196b --- /dev/null +++ b/apps/portal/src/components/resumes/landing/PrimaryFeatures.jsx @@ -0,0 +1,139 @@ +import clsx from 'clsx'; +import Image from 'next/future/image'; +import { useEffect, useState } from 'react'; +import { Tab } from '@headlessui/react'; + +import { Container } from './Container'; +import backgroundImage from './images/background-features.jpg'; +import screenshotExpenses from './images/screenshots/expenses.png'; +import screenshotPayroll from './images/screenshots/payroll.png'; +import screenshotVatReturns from './images/screenshots/vat-returns.png'; + +const features = [ + { + description: + 'Browse the most popular reviewed resumes out there and see what you can learn', + image: screenshotPayroll, + title: 'Browse', + }, + { + description: + 'Upload your own resume easily to get feedback from people in industry.', + image: screenshotExpenses, + title: 'Submit', + }, + { + description: + 'Pass the baton forward by reviewing resumes and bounce off ideas with other engineers out there.', + image: screenshotVatReturns, + title: 'Review', + }, +]; + +export function PrimaryFeatures() { + const [tabOrientation, setTabOrientation] = useState('horizontal'); + + useEffect(() => { + const lgMediaQuery = window.matchMedia('(min-width: 1024px)'); + + function onMediaQueryChange({ matches }) { + setTabOrientation(matches ? 'vertical' : 'horizontal'); + } + + onMediaQueryChange(lgMediaQuery); + lgMediaQuery.addEventListener('change', onMediaQueryChange); + + return () => { + lgMediaQuery.removeEventListener('change', onMediaQueryChange); + }; + }, []); + + return ( +
+ + +
+

+ Everything you need to up your resume game. +

+
+ + {({ selectedIndex }) => ( + <> +
+ + {features.map((feature, featureIndex) => ( +
+

+ + + {feature.title} + +

+ +
+ ))} +
+
+ + {features.map((feature) => ( + +
+
+

+ {feature.description} +

+
+
+ +
+ + ))} + + + )} + + +
+ ); +} diff --git a/apps/portal/src/components/resumes/landing/Testimonials.jsx b/apps/portal/src/components/resumes/landing/Testimonials.jsx new file mode 100644 index 00000000..91d31f40 --- /dev/null +++ b/apps/portal/src/components/resumes/landing/Testimonials.jsx @@ -0,0 +1,150 @@ +import Image from 'next/future/image'; + +import { Container } from './Container'; +import avatarImage1 from './images/avatars/avatar-1.png'; +import avatarImage2 from './images/avatars/avatar-2.png'; +import avatarImage3 from './images/avatars/avatar-3.png'; +import avatarImage4 from './images/avatars/avatar-4.png'; +import avatarImage5 from './images/avatars/avatar-5.png'; + +const testimonials = [ + { + columns: [ + { + author: { + image: avatarImage1, + name: 'Sheryl Berge', + role: 'CEO at Lynch LLC', + }, + content: + 'TaxPal is so easy to use I can’t help but wonder if it’s really doing the things the government expects me to do.', + }, + { + author: { + image: avatarImage4, + name: 'Amy Hahn', + role: 'Director at Velocity Industries', + }, + content: + 'I’m trying to get a hold of someone in support, I’m in a lot of trouble right now and they are saying it has something to do with my books. Please get back to me right away.', + }, + ], + name: 'column-one', + }, + { + columns: [ + { + author: { + image: avatarImage5, + name: 'Leland Kiehn', + role: 'Founder of Kiehn and Sons', + }, + content: + 'The best part about TaxPal is every time I pay my employees, my bank balance doesn’t go down like it used to. Looking forward to spending this extra cash when I figure out why my card is being declined.', + }, + { + author: { + image: avatarImage2, + name: 'Erin Powlowski', + role: 'COO at Armstrong Inc', + }, + content: + 'There are so many things I had to do with my old software that I just don’t do at all with TaxPal. Suspicious but I can’t say I don’t love it.', + }, + ], + name: 'column-two', + }, + { + columns: [ + { + author: { + image: avatarImage3, + name: 'Peter Renolds', + role: 'Founder of West Inc', + }, + content: + 'I used to have to remit tax to the EU and with TaxPal I somehow don’t have to do that anymore. Nervous to travel there now though.', + }, + { + author: { + image: avatarImage4, + name: 'Amy Hahn', + role: 'Director at Velocity Industries', + }, + content: + 'This is the fourth email I’ve sent to your support team. I am literally being held in jail for tax fraud. Please answer your damn emails, this is important.', + }, + ], + name: 'column-three', + }, +]; + +function QuoteIcon(props) { + return ( + + ); +} + +export function Testimonials() { + return ( +
+ +
+

+ Loved by software engineers worldwide. +

+

+ We crowdsource ideas and feedback from across the world, + guaranteeing you for success in your job application. +

+
+
    + {testimonials.map(({ name, columns }) => ( +
  • +
      + {columns.map((testimonial) => ( +
    • +
      + +
      +

      + {testimonial.content} +

      +
      +
      +
      +
      + {testimonial.author.name} +
      +
      + {testimonial.author.role} +
      +
      +
      + +
      +
      +
      +
    • + ))} +
    +
  • + ))} +
+
+
+ ); +} diff --git a/apps/portal/src/components/resumes/landing/images/avatars/avatar-1.png b/apps/portal/src/components/resumes/landing/images/avatars/avatar-1.png new file mode 100644 index 00000000..1df25e6b Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/avatars/avatar-1.png differ diff --git a/apps/portal/src/components/resumes/landing/images/avatars/avatar-2.png b/apps/portal/src/components/resumes/landing/images/avatars/avatar-2.png new file mode 100644 index 00000000..85456e71 Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/avatars/avatar-2.png differ diff --git a/apps/portal/src/components/resumes/landing/images/avatars/avatar-3.png b/apps/portal/src/components/resumes/landing/images/avatars/avatar-3.png new file mode 100644 index 00000000..44aaa9f9 Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/avatars/avatar-3.png differ diff --git a/apps/portal/src/components/resumes/landing/images/avatars/avatar-4.png b/apps/portal/src/components/resumes/landing/images/avatars/avatar-4.png new file mode 100644 index 00000000..dd9a5d2e Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/avatars/avatar-4.png differ diff --git a/apps/portal/src/components/resumes/landing/images/avatars/avatar-5.png b/apps/portal/src/components/resumes/landing/images/avatars/avatar-5.png new file mode 100644 index 00000000..91cd8a37 Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/avatars/avatar-5.png differ diff --git a/apps/portal/src/components/resumes/landing/images/background-auth.jpg b/apps/portal/src/components/resumes/landing/images/background-auth.jpg new file mode 100644 index 00000000..ab481c34 Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/background-auth.jpg differ diff --git a/apps/portal/src/components/resumes/landing/images/background-call-to-action.jpg b/apps/portal/src/components/resumes/landing/images/background-call-to-action.jpg new file mode 100644 index 00000000..13d8ee59 Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/background-call-to-action.jpg differ diff --git a/apps/portal/src/components/resumes/landing/images/background-faqs.jpg b/apps/portal/src/components/resumes/landing/images/background-faqs.jpg new file mode 100644 index 00000000..d9de04f7 Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/background-faqs.jpg differ diff --git a/apps/portal/src/components/resumes/landing/images/background-features.jpg b/apps/portal/src/components/resumes/landing/images/background-features.jpg new file mode 100644 index 00000000..6bea1038 Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/background-features.jpg differ diff --git a/apps/portal/src/components/resumes/landing/images/logos/laravel.svg b/apps/portal/src/components/resumes/landing/images/logos/laravel.svg new file mode 100644 index 00000000..bfa63bd4 --- /dev/null +++ b/apps/portal/src/components/resumes/landing/images/logos/laravel.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + diff --git a/apps/portal/src/components/resumes/landing/images/logos/mirage.svg b/apps/portal/src/components/resumes/landing/images/logos/mirage.svg new file mode 100644 index 00000000..204df737 --- /dev/null +++ b/apps/portal/src/components/resumes/landing/images/logos/mirage.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/apps/portal/src/components/resumes/landing/images/logos/statamic.svg b/apps/portal/src/components/resumes/landing/images/logos/statamic.svg new file mode 100644 index 00000000..25d7ba6c --- /dev/null +++ b/apps/portal/src/components/resumes/landing/images/logos/statamic.svg @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/apps/portal/src/components/resumes/landing/images/logos/statickit.svg b/apps/portal/src/components/resumes/landing/images/logos/statickit.svg new file mode 100644 index 00000000..381d21e7 --- /dev/null +++ b/apps/portal/src/components/resumes/landing/images/logos/statickit.svg @@ -0,0 +1,5 @@ + + + diff --git a/apps/portal/src/components/resumes/landing/images/logos/transistor.svg b/apps/portal/src/components/resumes/landing/images/logos/transistor.svg new file mode 100644 index 00000000..2b858cf4 --- /dev/null +++ b/apps/portal/src/components/resumes/landing/images/logos/transistor.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/apps/portal/src/components/resumes/landing/images/logos/tuple.svg b/apps/portal/src/components/resumes/landing/images/logos/tuple.svg new file mode 100644 index 00000000..2a9c2415 --- /dev/null +++ b/apps/portal/src/components/resumes/landing/images/logos/tuple.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/apps/portal/src/components/resumes/landing/images/screenshots/contacts.png b/apps/portal/src/components/resumes/landing/images/screenshots/contacts.png new file mode 100644 index 00000000..5901470b Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/screenshots/contacts.png differ diff --git a/apps/portal/src/components/resumes/landing/images/screenshots/expenses.png b/apps/portal/src/components/resumes/landing/images/screenshots/expenses.png new file mode 100644 index 00000000..ca35472e Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/screenshots/expenses.png differ diff --git a/apps/portal/src/components/resumes/landing/images/screenshots/inventory.png b/apps/portal/src/components/resumes/landing/images/screenshots/inventory.png new file mode 100644 index 00000000..b98721c6 Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/screenshots/inventory.png differ diff --git a/apps/portal/src/components/resumes/landing/images/screenshots/payroll.png b/apps/portal/src/components/resumes/landing/images/screenshots/payroll.png new file mode 100644 index 00000000..16f5b5a7 Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/screenshots/payroll.png differ diff --git a/apps/portal/src/components/resumes/landing/images/screenshots/profit-loss.png b/apps/portal/src/components/resumes/landing/images/screenshots/profit-loss.png new file mode 100644 index 00000000..229df78a Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/screenshots/profit-loss.png differ diff --git a/apps/portal/src/components/resumes/landing/images/screenshots/reporting.png b/apps/portal/src/components/resumes/landing/images/screenshots/reporting.png new file mode 100644 index 00000000..72b5e8e9 Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/screenshots/reporting.png differ diff --git a/apps/portal/src/components/resumes/landing/images/screenshots/vat-returns.png b/apps/portal/src/components/resumes/landing/images/screenshots/vat-returns.png new file mode 100644 index 00000000..3dd043bd Binary files /dev/null and b/apps/portal/src/components/resumes/landing/images/screenshots/vat-returns.png differ diff --git a/apps/portal/src/pages/resumes/index.tsx b/apps/portal/src/pages/resumes/browse.tsx similarity index 100% rename from apps/portal/src/pages/resumes/index.tsx rename to apps/portal/src/pages/resumes/browse.tsx diff --git a/apps/portal/src/pages/resumes/index.jsx b/apps/portal/src/pages/resumes/index.jsx new file mode 100644 index 00000000..89fbc1bb --- /dev/null +++ b/apps/portal/src/pages/resumes/index.jsx @@ -0,0 +1,25 @@ +import Head from 'next/head'; + +import { CallToAction } from '~/components/resumes/landing/CallToAction'; +import { Footer } from '~/components/resumes/landing/Footer'; +import { Hero } from '~/components/resumes/landing/Hero'; +import { PrimaryFeatures } from '~/components/resumes/landing/PrimaryFeatures'; +import { Testimonials } from '~/components/resumes/landing/Testimonials'; + +export default function Home() { + return ( + <> + + Resume Review + + +
+ + + + +
+ + ); +}