diff --git a/lib/revstack_web/live/whoami_live.ex b/lib/revstack_web/live/whoami_live.ex index 4b3fd13..758a8be 100644 --- a/lib/revstack_web/live/whoami_live.ex +++ b/lib/revstack_web/live/whoami_live.ex @@ -48,12 +48,10 @@ defmodule RevstackWeb.WhoamiLive do @section_navigation_items [ %{id: "whoami-hero", label: "Hero"}, - %{id: "whoami-glance", label: "At A Glance"}, - %{id: "whoami-summary", label: "Professional Summary"}, - %{id: "whoami-expertise", label: "Technical Expertise"}, - %{id: "whoami-experience", label: "Professional Experience"}, + %{id: "whoami-experience", label: "Career Highlights"}, %{id: "whoami-portfolio", label: "Career Portfolio"}, - %{id: "live-projects", label: "Personal Live Projects"}, + %{id: "whoami-expertise", label: "Technical Expertise"}, + %{id: "live-projects", label: "Independent Projects"}, %{id: "leadership-teamwork", label: "Leadership & Teamwork"}, %{id: "whoami-education", label: "Education"}, %{id: "whoami-interests", label: "When I'm Not Coding"}, @@ -171,14 +169,12 @@ defmodule RevstackWeb.WhoamiLive do />
<.hero_section /> - <.at_a_glance_section /> - <.professional_summary_section /> - <.technical_expertise_section /> <.professional_experience_section /> <.career_portfolio_section career_phases={@career_phases} expanded_phase_id={@career_expanded_phase_id} /> + <.technical_expertise_section /> <.live_projects_section admin_gallery_images={@admin_gallery_images} /> <.leadership_and_teamwork_section /> <.education_section /> @@ -209,22 +205,57 @@ defmodule RevstackWeb.WhoamiLive do ~H"""
-
- <.icon name="hero-user" class="size-4" /> Technical Profile -

Kyle Neal

- Lead Elixir & Erlang Engineer + Lead Distributed Systems Engineer

- 10+ years building revenue-critical distributed systems on the BEAM. - Erlang/OTP, Elixir, Phoenix LiveView, Cassandra, RabbitMQ, and technical leadership. + 12+ years building and owning revenue-critical, high-throughput production systems on the BEAM. Erlang/OTP, Elixir, Phoenix LiveView, and distributed data architecture at scale.

+ + <%!-- Grouped proof points for faster recruiter scanning --%> +
+
+

+ What I Bring +

+
+ + <.icon name="hero-clock" class="size-4" /> 12+ Years on the BEAM + + + <.icon name="hero-user-group" class="size-4" /> 5 Engineers Led & Mentored + + + <.icon name="hero-server-stack" class="size-4" /> End-to-End Platform Ownership + +
+
+ +
+

+ Systems I've Built +

+
+ + <.icon name="hero-bolt" class="size-4" /> Supported 1.5M+ Events/Day + + + <.icon name="hero-currency-dollar" class="size-4" /> Powered $2.5M+/mo Revenue + + + <.icon name="hero-arrow-trending-down" class="size-4" /> Enabled ~25% + Lower Infra Cost + +
+
+
+
<%!-- Quick links --%> @@ -284,68 +315,6 @@ defmodule RevstackWeb.WhoamiLive do """ end - defp at_a_glance_section(assigns) do - ~H""" -
-
-
- <.stat_card value="10+" label="Years on the BEAM" /> - <.stat_card value="1.5M+" label="Daily events processed by systems I built" /> - <.stat_card value="$2.5M+" label="Monthly revenue supported by systems I built" /> - <.stat_card value="5" label="Engineers managed" /> -
-
-
- """ - end - - defp professional_summary_section(assigns) do - ~H""" -
-
-
-

Professional Summary

-
-
-
- <.summary_item - icon="hero-cpu-chip" - text="Lead Distributed Systems Engineer focused on long-lived, production BEAM systems (Erlang/OTP + Elixir)" - /> - <.summary_item - icon="hero-server-stack" - text="Builds and operates high-throughput, revenue-critical platforms with a strong performance and operability mindset" - /> - <.summary_item - icon="hero-circle-stack" - text="Designs distributed data + messaging architectures across Cassandra/PostgreSQL, RabbitMQ, and search/analytics" - /> - <.summary_item - icon="hero-magnifying-glass" - text="Owns data modeling and query tuning across OLTP and time-series workloads, with deep comfort debugging production paths" - /> - <.summary_item - icon="hero-cog-6-tooth" - text="Reliability-first engineering: OTP fault tolerance, BEAM VM tuning, release strategy, CI/CD automation, and incident response" - /> - <.summary_item - icon="hero-computer-desktop" - text="Full-stack builder with Phoenix/LiveView and Ash; ships internal platforms and tooling from concept to production" - /> - <.summary_item - icon="hero-user-group" - text="Hands-on technical leader: mentors engineers, aligns cross-team delivery, and stays deep in the code" - /> - <.summary_item - icon="hero-cloud" - text="Infrastructure-aware across AWS and Linux, with pragmatic automation experience (Jenkins/Ansible)" - /> -
-
-
- """ - end - defp technical_expertise_section(assigns) do ~H"""
-
-
-

Professional Experience

-
+
+ -
- <.experience_card + +
+ <.career_highlight_card + id="career-highlight-ionik" title="Lead Distributed Systems Engineer" - company="Ubiquity Agency an Ionik company" - period="October 2014 — 2026" - current?={false} - items={[ - "Lead architect and primary backend engineer for a revenue-critical affiliate network platform written in Erlang, supporting $2.5M+ monthly revenue and processing 1.5M+ events daily (~20+ events/sec average with significantly higher peak throughput).", - "Design and operate distributed data and messaging architecture including a 6-node Cassandra production cluster, RabbitMQ event pipelines, and Elasticsearch/OpenSearch analytics infrastructure.", - "Own data modeling and performance strategy across Cassandra and PostgreSQL; routinely debug and optimize complex production queries and high-volume transaction paths.", - "Responsible for system reliability, BEAM VM tuning, release strategy (relup), CI/CD automation, and production incident debugging across distributed environments.", - "Architected and built an internal infrastructure management platform from inception, a full-stack Elixir (Phoenix + Ash) internal infrastructure control platform enabling resource lifecycle orchestration, authorization modeling, operational auditability, and cross-system automation.", - "Lead and managed 5 engineers (UI + infrastructure) while remaining hands-on across backend, data architecture, and full-stack feature delivery. Conducted technical interviews and evaluated engineering candidates as part of the hiring process." - ]} - /> - <.experience_card - title="Founder & Software Engineer" - company="RevenueLink Technologies LLC" - period="2023 — Present" - current?={true} - items={[ - "Founded a consulting and technology services company used for independent software projects, consulting engagements, and local technology services.", - {:parts, - [ - {:text, "Designed and built "}, - {:link, "https://hardcorehandyman.fly.dev/", "hardcorehandyman.fly.dev"}, - {:text, - " (formerly hardcorehandymanoflawton.com), a custom lead-generation platform for a local handyman business. Built with Elixir, Phoenix LiveView, and Ecto, the system included SEO-driven service pages, conversion-focused design, and an internal admin interface for managing customer quote requests with photo uploads of project details. "}, - {:strong, - "The platform ultimately generated more inbound demand than the business could operationally support."} - ]}, - {:parts, - [ - {:text, "Built and operate "}, - {:link, "https://revstack.fly.dev/", "revstack.fly.dev"}, - {:text, - ", a Phoenix LiveView application serving as a professional portfolio, lead-generation platform, and development sandbox for new ideas."} - ]}, - "Provide consulting and technical services including custom web application development, systems architecture guidance, and local technology support for individuals and small businesses.", - "Use the company as a vehicle for experimentation with Elixir, distributed systems, infrastructure tooling, and small SaaS-style projects." - ]} - /> - <.experience_card - title="Application Programmer" - company="CGI Federal" - period="December 2013 — October 2014" - current?={false} - items={[ - "Performed detailed source code analysis for enterprise Java/ADA systems.", - "Developed tooling and assisted with build/release workflows for multi-million SLOC applications.", - "Created smoke and sanity testing processes supporting production releases." - ]} - /> - <.experience_card - title="In-House Technician" - company="Wichita Online" - period="April 2013 — December 2013" - current?={false} + company="Ionik (formerly VeriAS)" + period="October 2014 — March 2026" + featured?={true} items={[ - "Provided in-field network troubleshooting and wireless equipment deployment (MikroTik, Canopy routers)." + "Architected, built, and ultimately owned a revenue-critical affiliate network platform in Erlang/OTP, replacing HitPath and scaling it to support $2.5M+ monthly revenue and 1.5M+ events/day, spanning initial development, multi-team expansion, and full system ownership and rewrite.", + "Built NetAdmin in Elixir, Phoenix LiveView, and Ash Framework as the internal platform for orchestration, monitoring, auditability, and cross-system automation. Enabled ~25% reduction in company infrastructure costs.", + "Designed and operated the data and reporting stack across Cassandra, RabbitMQ, Elasticsearch/OpenSearch, PostgreSQL, and Spark on AWS EMR while leading 5 engineers and reducing infrastructure spend by roughly 25%." ]} /> + +
+
+ <.career_highlight_card + id="career-highlight-revenuelink" + title="Founder & Software Engineer" + company="RevenueLink Technologies LLC" + period="2023 — Present" + items={[ + "Founded RevenueLink as a vehicle for independent product work, consulting, and hands-on experimentation with Elixir systems and small SaaS-style platforms.", + "Built Hardcore Handyman end-to-end with Phoenix LiveView, conversion-focused UX, and internal quoting workflows; the platform generated more inbound demand than the business could operationally support." + ]} + /> + + <.career_highlight_card + id="career-highlight-cgi" + title="Application Programmer" + company="CGI Federal" + period="December 2013 — October 2014" + items={[ + "Analyzed enterprise Java and ADA codebases and supported tooling plus build and release workflows for multi-million-line systems." + ]} + /> +
+ +
+ <.career_highlight_card + id="career-highlight-wichita" + title="In-House Technician" + company="Wichita Online" + period="April 2013 — December 2013" + items={[ + "Handled in-field and remote network troubleshooting plus wireless equipment deployment for production ISP infrastructure." + ]} + /> + + <.career_highlight_card + id="career-highlight-tutor" + title="Computer Science Tutor" + company="Academic Tutoring" + period="See Resume" + items={[ + "Provided one-on-one computer science tutoring with a focus on programming fundamentals, problem solving, and helping students work through technical course material." + ]} + /> +
+
@@ -486,11 +483,11 @@ defmodule RevstackWeb.WhoamiLive do

Career Portfolio

- Two major chapters of production systems engineering on the BEAM.
+ From deep systems work to large-scale platform ownership and leadership.
<.icon name="hero-cursor-arrow-rays" class="size-7 inline-block align-text-bottom" - />click a phase to explore the systems and projects behind it. + />Click a phase to explore the systems and projects behind it.

@@ -511,17 +508,10 @@ defmodule RevstackWeb.WhoamiLive do
- <%!--
- <.icon name="hero-rocket-launch" class="size-4" /> Live & Deployed -
--%> -

Personal Live Projects

+

Independent Projects

- Production applications I designed, built, and deployed on my spare time
- <.icon - name="hero-cursor-arrow-rays" - class="size-5 inline-block align-text-bottom" - />click a project to explore. + Beyond production systems, I continue to build and deploy independent projects exploring new ideas and technologies.

@@ -529,7 +519,7 @@ defmodule RevstackWeb.WhoamiLive do <.project_card id="project-handyman" title="Hardcore Handyman" - subtitle="Production Phoenix LiveView system enabling customers to submit job requests with image uploads. Data is validated, stored with Ecto, and triggers email notifications for a streamlined quoting workflow." + subtitle="Full-stack Elixir lead-generation platform with SEO-driven service pages, conversion-focused design, and admin interface. Generated more inbound demand than the business could operationally support." href="https://hardcorehandyman.fly.dev/" icon="hero-wrench-screwdriver" preview_src={~p"/images/hardcorehandyman_preview.png"} @@ -581,7 +571,7 @@ defmodule RevstackWeb.WhoamiLive do <.education_card degree="A.S. Information Technology" school="Cameron University" - period="2014 — 2016" + period="2012 — 2014" honors="Magna Cum Laude" />
@@ -656,8 +646,8 @@ defmodule RevstackWeb.WhoamiLive do
  • <.icon name="hero-chevron-right" class="size-4 text-primary shrink-0 mt-0.5" /> - Collaborated with 5 backend - and 3 DevOps engineers + Collaborated with 5 backend, 3 DevOps engineers, and + 2 frontend engineers to build a multi-million-dollar affiliate network platform.
  • @@ -666,13 +656,13 @@ defmodule RevstackWeb.WhoamiLive do Partnered with 2 lead engineers on architecture and initial production launch, then became the sole owner - for features, maintenance, and major rewrites. + for features, maintenance, and major rewrites. Ultimately rewrote more of the system than the original team-built release contained.
  • <.icon name="hero-chevron-right" class="size-4 text-primary shrink-0 mt-0.5" /> - Ultimately rewrote more of the system than the original team-built release contained. + Led the NetAdmin platform rewrite, initially building the foundation independently, then mentoring junior Elixir engineers on scoped features, and ultimately driving the system to full production completion as the primary owner.
  • @@ -745,27 +735,50 @@ defmodule RevstackWeb.WhoamiLive do ~H"""
    +
    +

    Let's Talk

    +
    +
    - -
    + <%!-- Primary: Hiring --%> +
    <.icon name="hero-briefcase" class="size-7" />

    - Hiring for a role? + Looking for an engineer?

    - I'm always open to discussing the right engineering opportunity. + Open to the right distributed systems or platform engineering opportunity.

    <.link navigate={~p"/contact"} class="btn btn-primary gap-2"> <.icon name="hero-envelope" class="size-4" /> Get in Touch + +
    - -
    + <%!-- Secondary: Consulting --%> +
    <.icon name="hero-wrench-screwdriver" class="size-7" />
    @@ -1107,26 +1120,6 @@ defmodule RevstackWeb.WhoamiLive do """ end - defp stat_card(assigns) do - ~H""" -
    -

    {@value}

    -

    {@label}

    -
    - """ - end - - defp summary_item(assigns) do - ~H""" -
    -
    - <.icon name={@icon} class="size-4" /> -
    -

    {@text}

    -
    - """ - end - defp expertise_group(assigns) do ~H"""
    @@ -1141,64 +1134,44 @@ defmodule RevstackWeb.WhoamiLive do """ end - defp experience_card(assigns) do + defp career_highlight_card(assigns) do + assigns = assign_new(assigns, :featured?, fn -> false end) + ~H""" -
    -
    +
    +
    -

    {@title}

    -

    {@company}

    -
    -
    - {@period} - - Current - + Primary Career Role +
    +

    {@title}

    +

    {@company}

    + {@period}
    -
      + +
      • <.icon name="hero-chevron-right" class="size-4 text-primary shrink-0 mt-0.5" /> - <.experience_item item={item} /> + {item}
      -
    - """ - end - - defp experience_item(%{item: item} = assigns) when is_binary(item) do - ~H"{@item}" - end - - defp experience_item(%{item: {:parts, parts}} = assigns) do - assigns = assign(assigns, :parts, parts) - - ~H""" - - <%= for part <- @parts do %> - <%= case part do %> - <% {:text, text} -> %> - {text} - <% {:link, url, label} -> %> - - {label}<.icon name="hero-arrow-top-right-on-square" class="size-3 ml-0.5 shrink-0" /> - - <% {:strong, text} -> %> - {text} - <% end %> - <% end %> - + """ end @@ -1762,7 +1735,7 @@ defmodule RevstackWeb.WhoamiLive do card_icon: "hero-signal", card_era: "2014-2018 — Early Career", card_summary: - "Built distributed Erlang systems powering large-scale email verification and sending infrastructure, including DNS/SMTP services, operational tooling, and backend automation for high-volume deliverability systems.", + "Built distributed Erlang systems powering large-scale email verification and sending — custom DNS servers, proxy infrastructure, fleet monitoring, and operational tooling.", card_badges: [ "Erlang/OTP", "PostgreSQL", @@ -2147,7 +2120,7 @@ defmodule RevstackWeb.WhoamiLive do card_icon: "hero-chart-bar", card_era: "2018–2026 — Senior Engineer & Platform Ownership", card_summary: - "Built and owned a revenue-critical affiliate network platform end-to-end, spanning high-throughput Erlang services, internal Elixir/Phoenix tooling, and large-scale Cassandra, Elasticsearch, and PostgreSQL data systems.", + "Owned end-to-end: high-throughput Erlang services, Elixir/Phoenix/Ash internal tooling, and large-scale Cassandra, Elasticsearch, and PostgreSQL data systems powering $2.5M+/mo revenue.", card_badges: [ "Erlang/OTP", "Elixir", diff --git a/mix.exs b/mix.exs index 8d9f519..51d5603 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Revstack.MixProject do def project do [ app: :revstack, - version: "1.2.4", + version: "1.3.0", elixir: "~> 1.15", elixirc_paths: elixirc_paths(Mix.env()), start_permanent: Mix.env() == :prod, diff --git a/test/revstack_web/whoami_live_layout_test.exs b/test/revstack_web/whoami_live_layout_test.exs index 58466f5..4a4aab7 100644 --- a/test/revstack_web/whoami_live_layout_test.exs +++ b/test/revstack_web/whoami_live_layout_test.exs @@ -27,6 +27,38 @@ defmodule RevstackWeb.WhoamiLiveLayoutTest do assert has_element?(view, "#whoami-role-title") assert has_element?(view, "#whoami-skill-signature") end + + test "renders grouped proof points for strengths and system scale", %{conn: conn} do + {:ok, view, _html} = live(conn, ~p"/") + + assert has_element?(view, "#whoami-proof-points") + assert has_element?(view, "#whoami-proof-points-strengths") + assert has_element?(view, "#whoami-proof-points-scale") + assert has_element?(view, "#whoami-proof-points-strengths p", "What I Bring") + assert has_element?(view, "#whoami-proof-points-scale p", "Systems I've Built") + assert has_element?(view, "#whoami-proof-points-strengths span", "12+ Years on the BEAM") + + assert has_element?( + view, + "#whoami-proof-points-strengths span", + "5 Engineers Led & Mentored" + ) + + assert has_element?( + view, + "#whoami-proof-points-strengths span", + "End-to-End Platform Ownership" + ) + + assert has_element?(view, "#whoami-proof-points-scale span", "Supported 1.5M+ Events/Day") + assert has_element?(view, "#whoami-proof-points-scale span", "Powered $2.5M+/mo Revenue") + + assert has_element?( + view, + "#whoami-proof-points-scale span", + "Enabled ~25% Lower Infra Cost" + ) + end end describe "combined leadership and teamwork section" do @@ -85,4 +117,38 @@ defmodule RevstackWeb.WhoamiLiveLayoutTest do refute section == [] end end + + describe "career highlights section" do + test "renders curated summary framing and in-section resume CTAs", %{conn: conn} do + {:ok, view, _html} = live(conn, ~p"/") + + assert has_element?(view, "#whoami-experience") + assert has_element?(view, "#career-highlights-subtitle") + + assert has_element?( + view, + "#career-highlights-view-resume-link[href='/resume/kyle-neal-resume.pdf'][target='_blank']", + "View Resume" + ) + + assert has_element?( + view, + "#career-highlights-download-resume-link[href='/resume/download/kyle-neal-resume.pdf'][download]", + "Download Resume" + ) + end + + test "renders compact highlight cards instead of an expandable resume mirror", %{conn: conn} do + {:ok, view, _html} = live(conn, ~p"/") + + assert has_element?(view, "#career-highlight-ionik") + assert has_element?(view, "#career-highlight-revenuelink") + assert has_element?(view, "#career-highlight-cgi") + assert has_element?(view, "#career-highlight-wichita") + assert has_element?(view, "#career-highlight-tutor") + + refute has_element?(view, "#experience-toggle") + refute has_element?(view, "#experience-detail") + end + end end diff --git a/test/revstack_web/whoami_live_navigation_menu_test.exs b/test/revstack_web/whoami_live_navigation_menu_test.exs index b28c9e6..cb8f042 100644 --- a/test/revstack_web/whoami_live_navigation_menu_test.exs +++ b/test/revstack_web/whoami_live_navigation_menu_test.exs @@ -43,12 +43,24 @@ defmodule RevstackWeb.WhoamiLiveNavigationMenuTest do "Career Portfolio" ) + assert has_element?( + view, + "#section-nav-link-whoami-experience[href='#whoami-experience']", + "Career Highlights" + ) + assert has_element?( view, "#section-nav-link-leadership-teamwork[href='#leadership-teamwork']", "Leadership & Teamwork" ) + assert has_element?( + view, + "#section-nav-link-live-projects[href='#live-projects']", + "Independent Projects" + ) + assert has_element?( view, "#section-nav-link-whoami-source[href='#whoami-source']", diff --git a/test/revstack_web/whoami_live_projects_test.exs b/test/revstack_web/whoami_live_projects_test.exs index a59f5b0..26ac874 100644 --- a/test/revstack_web/whoami_live_projects_test.exs +++ b/test/revstack_web/whoami_live_projects_test.exs @@ -89,32 +89,56 @@ defmodule RevstackWeb.WhoamiLiveProjectsTest do end end - describe "professional experience emphasis" do - test "renders the demand outcome sentence in bold", %{conn: conn} do + describe "career highlights emphasis" do + test "keeps the Ionik role as the dominant recruiter-facing summary", %{conn: conn} do {:ok, view, _html} = live(conn, ~p"/whoami") assert has_element?( view, - "strong.experience-emphasis", - "The platform ultimately generated more inbound demand than the business could operationally support." + "#career-highlight-ionik li", + "Architected, built, and ultimately owned a revenue-critical affiliate network platform in Erlang/OTP" + ) + + assert has_element?( + view, + "#career-highlight-ionik li", + "Built NetAdmin in Elixir, Phoenix LiveView, and Ash Framework as the internal platform" + ) + + assert has_element?( + view, + "#career-highlight-ionik li", + "Cassandra, RabbitMQ, Elasticsearch/OpenSearch, PostgreSQL, and Spark on AWS EMR" ) end - test "renders handyman SEO and implementation details in founder experience", %{ + test "shows entrepreneurial and real-world demand proof in the RevenueLink role", %{ conn: conn } do {:ok, view, _html} = live(conn, ~p"/whoami") assert has_element?( view, - "li", - "the system included SEO-driven service pages, conversion-focused design" + "#career-highlight-revenuelink li", + "Founded RevenueLink as a vehicle for independent product work, consulting, and hands-on experimentation" ) assert has_element?( view, - "li", - "Built with Elixir, Phoenix LiveView, and Ecto" + "#career-highlight-revenuelink li", + "the platform generated more inbound demand than the business could operationally support" + ) + end + + test "includes the tutor role alongside the other supporting experience cards", %{conn: conn} do + {:ok, view, _html} = live(conn, ~p"/whoami") + + assert has_element?(view, "#career-highlight-tutor") + + assert has_element?( + view, + "#career-highlight-tutor li", + "Provided one-on-one computer science tutoring" ) end end