Skip to main content
The resume site at ryan.war.re is Ryan Warren’s full online resume — a statically exported Next.js page that lists his technical skills, professional work history, side projects, and education. Like the main site, it uses a root redirect and hosts its content at /n.
Visiting ryan.war.re/ redirects to ryan.war.re/n via an HTML meta refresh tag, for the same reason as the main site: the project uses Next.js static export with no server available for HTTP-level redirects. A <noscript> fallback link is also included on the root page.

Resume Sections

The resume page is divided into four top-level sections, each introduced by an <Experience> heading component and populated by one or more <Activity> entries.

Technical Experience

Lists the programming languages, tools, and editors Ryan works with day-to-day, followed by a brief statement of engineering interests.

Relevant Work Experience

Chronological employment history from his 2012 student tech role at UW through his current Senior Software Engineer position at Stripe.

Related Activities

Personal projects and coursework, including the PiDuinoLock hardware project and ongoing web programming experience.

Education

Bachelor of Science in Computer Science and Software Engineering from the University of Washington, graduated June 2015.

Work Experience Entries

The following positions are rendered in reverse chronological order under the Relevant Work Experience heading.

React Components

The resume is assembled from four custom React components. Each has a narrow, well-defined responsibility.

Experience — Section Heading

The simplest component. It accepts a single heading string prop and renders it as an <h2>.
Usage in the page:

Activity — Individual Entry

Activity is the primary content component. It renders a single job, project, or coursework entry — including the title, company (optionally linked), team name, date range, auto-calculated duration, and a bullet list of accomplishments.
The name and each entry in items accept either a plain string or a full ReactNode. This allows inline links (via <ExperienceItem>) to be embedded directly inside bullet points — for example, referencing Authy for 2FA or Bitbucket for source control.
Duration calculation. When a start date is provided, Activity uses date-fns to calculate and display the elapsed time. The string "Present" is interpreted as today’s date.
The formatted duration is displayed in brackets next to the entry heading — for example, [3 Years 5 Months] — and is re-calculated at build time each time the site is deployed.

ActivityList — Bullet List of Accomplishments

ActivityList receives the items array from Activity and renders each entry as an <li> inside a <ul>. It handles both string and ReactNode items transparently.

ExperienceItem — Linked Skill or Technology Name

ExperienceItem renders either a plain text span or a hyperlink, depending on whether a url prop is provided. It is used in two ways:
  1. Inline within ActivityList items — to link third-party tools mentioned in bullet points (e.g., Authy, Nymi, WordPress).
  2. In the Technical Experience section — to render each technology and editor as a clickable link.

Technical Experience Section

The Technical Experience section uses ActivityList directly (without an Activity wrapper) to display two bullet points. Each technology and editor name in those bullets is rendered as an <ExperienceItem> link. Technologies listed: Editors listed: Claude Code, Cursor, Vim, IntelliJ, vscode
The editors Claude Code, Cursor, Vim, and IntelliJ are defined in an editors array of ExperienceItemProps and mapped into linked items. vscode is appended separately after the mapped list as & vscode, linked to code.visualstudio.com.
The second bullet point reads: “Excited by backend and full stack platform development, with a curiosity for security and AI.”

Open Graph and Metadata

The resume page configures its <Head> with og:type set to profile (rather than website), and includes Open Graph profile fields alongside standard Twitter Card tags.
The robots and googlebot meta tags include noemailindex on the resume (unlike the main site), which prevents search engines from indexing the ryan@war.re email address that appears in the resume header.