PageSourceSearch

https://faster.dev/build/assets/Home-BgMr_Kd7.js

js faster.dev collected 2026-10-06 18:44:48 UTC 20,426 bytes, 1 lines download raw bytes

1import{r as x,j as e,H as C,L as d,u as I}from"./app-nzbjN7nc.js";import{P as F}from"./particle-text-3Ee0fngd.js";import{b as A}from"./series-card-CZMe_Jpq.js";import{C as w,F as P}from"./catalog-grid-VSVG5z4K.js";import{S as D,b,c as z,e as v,i as L}from"./site-navigation-Dy-Yzvcq.js";import{S as R}from"./site-footer-CvAKrAmy.js";import{P as V}from"./project-card-DUXBwWsU.js";import{F as _,S as T}from"./floating-nav-BIzQpW5x.js";import{G as E,S as y,P as B}from"./patterns-Bnhyrft4.js";import{c as j,e as q}from"./index-5tZebizn.js";import{b as p,B as G}from"./button-CP8q-Q0s.js";import{C as $}from"./card-DVvp17e5.js";import{F as i,a as U}from"./faq-section-Bj2NF-QH.js";import{P as H}from"./pricing-card-scjv8xg5.js";import{I as M}from"./input-CosCVajg.js";import{c as f,a as k}from"./utils-DMHpy-pb.js";import{X as O}from"./x-CgDaFHDE.js";import{A as l}from"./arrow-right-D179nxGC.js";import{T as u}from"./terminal-S8yn3haw.js";import{L as N}from"./layers-AJ-94iyQ.js";import{C as Y}from"./circle-check-big-DuYcJQRP.js";import{L as J}from"./loader-circle-YR25MYzE.js";/* empty css            */import"./sparkles-DVdFoU1K.js";import"./createLucideIcon-CR51Zaex.js";import"./badge-CIzL7TR5.js";import"./format-duration-DJNOdZ6p.js";import"./brand-mark-BDpSUUaV.js";import"./visuallyHidden-6_PmS3Oo.js";import"./CompositeList-BBSvUwCg.js";import"./useOpenChangeComplete-C7khVi7i.js";import"./chevron-down-D6-2WSxT.js";import"./menu-Bb2WKwtp.js";import"./arrow-up-right-CTJuE0Yl.js";import"./check-DcPvqVuK.js";function Q(s,r){const t=s/100,a=!Number.isInteger(t);return new Intl.NumberFormat("en-US",{style:"currency",currency:r,minimumFractionDigits:a?2:0,maximumFractionDigits:a?2:0}).format(t)}function W(s){const r=s.toLowerCase();return r==="month"?"/month":r==="year"?"/year":`/${r}`}function X(s){const r=Q(s.amountInCents,s.currency),t=W(s.interval);return{displayPrice:r,period:t,heroCta:`Join for ${r}${t}`,checkoutCta:"Start subscription"}}const Z=k("flex items-end justify-between",{variants:{spacing:{default:"mb-16",sm:"mb-10",lg:"mb-20",none:""}},defaultVariants:{spacing:"default"}}),K=k("text-xl text-muted-foreground mt-4",{variants:{width:{default:"max-w-lg",wide:"max-w-2xl",none:""}},defaultVariants:{width:"default"}}),g=x.forwardRef(({className:s,number:r,title:t,description:a,cta:o,descriptionClassName:c,spacing:m,width:h,...n},S)=>e.jsx("div",{ref:S,"data-slot":"section-intro",className:f("",s),...n,children:e.jsxs("div",{className:f(Z({spacing:m})),children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-muted-foreground mb-4 block",children:r}),e.jsx("h2",{className:"text-5xl md:text-6xl font-medium tracking-tight",children:t}),e.jsx("p",{className:f(K({width:h}),c),children:a})]}),o]})}));g.displayName="SectionIntro";function ee({style:s,onVisibilityChange:r}){const t=x.useRef(null);return x.useEffect(()=>{if(!r||!t.current)return;const a=new IntersectionObserver(([o])=>{r(o.isIntersecting)},{threshold:0});return a.observe(t.current),()=>a.disconnect()},[r]),e.jsx("section",{ref:t,className:"relative angle-br-up-24 angle-line-velocity-energy h-[calc(32dvh+var(--angle-size)-var(--spacing))] md:h-[calc(38dvh+var(--angle-size)-var(--spacing))] bg-void-900 flex flex-col",style:s,children:e.jsxs("div",{className:"relative flex-1 flex flex-col",children:[e.jsx("div",{className:"absolute inset-0 opacity-[0.015] pointer-events-none",style:{backgroundImage:E}}),e.jsx(D,{variant:"dark"}),e.jsx("div",{className:"flex-1 min-h-0 relative",children:e.jsx(F,{text:"faster.",backgroundColor:"#1a1a1a",particleColor:"248, 247, 244",centerByGlyphBounds:!0,className:"absolute inset-0 pointer-events-none lg:pointer-events-auto lg:cursor-crosshair touch:pointer-events-none",letterParams:{f:{density:.15,drift:.64},a:{density:.15,drift:.45},s:{density:.21,drift:.29},t:{density:.4,drift:.28},e:{density:.58,drift:.1},r:{density:1,drift:0},".":{density:.45,drift:.57}}})})]})})}function se({style:s}){return e.jsxs("section",{id:"about-aaron",className:"section px-4 md:px-10 bg-secondary overflow-hidden angle-br-up-24 angle-line-flux-energy",style:s,children:[e.jsx("div",{className:"absolute inset-0 pointer-events-none opacity-40",style:{backgroundImage:y,backgroundSize:"10px 10px"}}),e.jsxs("div",{className:"relative z-10 max-w-6xl mx-auto grid items-center gap-10 lg:grid-cols-[minmax(0,420p
1x)_minmax(0,1fr)] lg:gap-14",children:[e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute inset-0 translate-x-3 translate-y-3 rounded-2xl border border-border/70 bg-muted/30"}),e.jsx("div",{className:"relative overflow-hidden rounded-2xl border border-border bg-muted/40",children:e.jsx("img",{src:"/images/aaron.jpg",alt:"Aaron Francis",className:"h-full w-full object-cover",loading:"lazy"})})]}),e.jsxs("div",{children:[e.jsx("span",{className:"mb-4 block text-xs text-muted-foreground",children:"About Your Instructor"}),e.jsx("h2",{className:"text-4xl font-medium tracking-tight md:text-5xl",children:"Build faster with someone who has shipped for decades."}),e.jsxs("div",{className:"mt-8 space-y-5 text-lg text-muted-foreground",children:[e.jsx("p",{children:"My name is Aaron Francis. I've been a professional software developer for over 20 years, served as both CTO and COO, and shipped dozens of products that made real money."}),e.jsxs("p",{children:["I created"," ",e.jsx("a",{href:"https://databaseschool.com",target:"_blank",rel:"noopener noreferrer",className:"text-foreground underline decoration-border hover:decoration-foreground",children:"Database School"})," ","and"," ",e.jsx("a",{href:"https://screencasting.com",target:"_blank",rel:"noopener noreferrer",className:"text-foreground underline decoration-border hover:decoration-foreground",children:"Screencasting.com"}),","," ",e.jsx("a",{href:"https://soloterm.com",target:"_blank",rel:"noopener noreferrer",className:"text-foreground underline decoration-border hover:decoration-foreground",children:"Solo"}),", and"," ",e.jsx("a",{href:"https://github.com/aarondfrancis/counselors",target:"_blank",rel:"noopener noreferrer",className:"text-foreground underline decoration-border hover:decoration-foreground",children:"Counselors"}),", and built courses for"," ",e.jsx("a",{href:"https://laracasts.com",target:"_blank",rel:"noopener noreferrer",className:"text-foreground underline decoration-border hover:decoration-foreground",children:"Laracasts"})," ","and"," ",e.jsx("a",{href:"https://planetscale.com",target:"_blank",rel:"noopener noreferrer",className:"text-foreground underline decoration-border hover:decoration-foreground",children:"PlanetScale"}),"."," ","I'm an educator at heart."]}),e.jsx("p",{children:"Faster.dev is where I share the exact systems I use to ship high-quality software quickly with AI."})]}),e.jsxs("div",{className:"mt-8 flex flex-wrap items-center gap-3",children:[e.jsxs(d,{href:b(),className:p({size:"lg",className:"rounded-sm"}),children:["Start watching",e.jsx(l,{className:"ml-2 h-4 w-4"})]}),e.jsx("a",{href:"https://aaronfrancis.com",target:"_blank",rel:"noopener noreferrer",className:p({variant:"outline",size:"lg",className:"rounded-sm"}),children:"More about Aaron"})]})]})]})]})}function te({series:s,style:r}){return s.length===0?null:e.jsx("section",{className:"section px-6 lg:px-10 bg-background overflow-hidden angle-br-up-24 angle-line-energy-blaze",style:r,children:e.jsxs("div",{className:"max-w-[1600px] mx-auto",children:[e.jsxs("div",{className:"max-w-2xl mx-auto mb-16 md:mb-20 text-left",children:[e.jsx("span",{className:"block mb-4 text-xs text-muted-foreground",children:"What is faster.dev?"}),e.jsx("h2",{className:"text-2xl md:text-3xl font-medium tracking-tight text-foreground",children:"Practical AI-assisted development for engineers who still care about quality."}),e.jsxs("div",{className:"mt-5 space-y-4 text-muted-foreground",children:[e.jsx("p",{children:"faster.dev is a training platform for software developers who want to ship more without turning their codebase into chaos."}),e.jsx("p",{children:"You should use it if you want workflows that make AI useful in real projects, not just impressive demos."}),e.jsx("p",{children:"You get structured video series, behind-the-scenes project logs, and downloadable slash commands, skills, and rules you can use right away."})]})]}),e.jsx(g,{number:"01",title:"Video Series",description:"Structured courses that take you from concept to mastery.",cta:e.jsxs(d,{href:b(),className:"hidden md:flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors group",children:["View all series",e.jsx(l,{className:"w-4 h-4 group-hover:translate-x-1 transition-transform"})]})}),e.jsx(w,{children:s.map(t=>e.jsx(A,{static:!0,shape:t.shape,overlay:t.overlay,title:t.title,de
1scription:t.description,imageUrl:t.image??"/chatgpt-logo.png",color:t.color,href:z({series:t.slug}).url,videos:t.videos,runtime:t.runtime??void 0,lastUpdated:t.lastUpdated},t.slug))}),e.jsx("div",{className:"mt-12 text-center md:hidden",children:e.jsxs(d,{href:b(),className:p({variant:"outline",size:"lg"}),children:["View all series",e.jsx(l,{className:"w-4 h-4 ml-2"})]})})]})})}function re({notes:s,style:r}){return s.length===0?null:e.jsx("section",{id:"field-notes",className:"section px-4 md:px-10 bg-background overflow-hidden angle-br-up-24 angle-line-energy-blaze",style:r,children:e.jsxs("div",{className:"max-w-[1600px] mx-auto",children:[e.jsx(g,{number:"02",title:"Field Notes",description:"Stand-alone videos for techniques, workflows, and practical lessons.",cta:e.jsxs(d,{href:v(),className:"hidden md:flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors group",children:["View all field notes",e.jsx(l,{className:"w-4 h-4 group-hover:translate-x-1 transition-transform"})]})}),e.jsx(w,{children:s.map(t=>e.jsx(P,{note:t},t.slug))}),e.jsx("div",{className:"mt-12 text-center md:hidden",children:e.jsxs(d,{href:v(),className:p({variant:"outline",size:"lg"}),children:["View all field notes",e.jsx(l,{className:"w-4 h-4 ml-2"})]})})]})})}function ae({projects:s,style:r}){return s.length===0?null:e.jsx("section",{id:"project-logs",className:"section px-4 md:px-10 bg-background overflow-hidden angle-br-up-24 angle-line-blaze-pulse",style:r,children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx(g,{number:"03",title:"Project Logs",description:"Follow behind the scenes as I build real products, with real users and real revenue.",descriptionClassName:"max-w-2xl",cta:e.jsxs(d,{href:L(),className:"hidden md:flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors group",children:["View all projects",e.jsx(l,{className:"w-4 h-4 group-hover:translate-x-1 transition-transform"})]})}),e.jsx("div",{className:"space-y-1",children:s.map((t,a)=>e.jsx(V,{project:t,index:a},t.slug))})]})})}function ne({style:s}){return e.jsx("section",{className:"section px-4 md:px-10 bg-secondary overflow-hidden angle-br-up-24 angle-line-pulse-flux",style:s,children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx(g,{number:"04",title:"Resources",description:"Slash commands and workflows to accelerate your work.",cta:e.jsxs(d,{href:"/skills",className:"hidden md:flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors group",children:["View all skills",e.jsx(l,{className:"w-4 h-4 group-hover:translate-x-1 transition-transform"})]})}),e.jsxs("div",{className:"mb-12",children:[e.jsx("h3",{className:"text-xs text-muted-foreground mb-6",children:"Slash Commands"}),e.jsxs("div",{className:"grid md:grid-cols-3 gap-6",children:[e.jsx(i,{icon:u,title:"/test",description:"Auto-detect test framework, run suite, diagnose failures, fix them, re-run until green.",color:"velocity"}),e.jsx(i,{icon:u,title:"/pr-create",description:"Commit, push, create PR, monitor CI, fix failures, request CodeRabbit review.",color:"velocity"}),e.jsx(i,{icon:u,title:"/issue",description:"Fetch GitHub issue, create branch, write failing tests, implement fix, create PR.",color:"velocity"})]}),e.jsxs("div",{className:"grid md:grid-cols-3 gap-6 mt-6",children:[e.jsx(i,{icon:u,title:"/visual-diff",description:"Screenshot two URLs, generate ImageMagick diff, fix visual discrepancies.",color:"velocity"}),e.jsx(i,{icon:u,title:"/cleanup",description:"Parallel audit for dead code, missing tests, weak types, abstraction opportunities.",color:"velocity"}),e.jsx(i,{icon:u,title:"/finalize",description:"Remove false starts, consolidate working code, run tests to verify clean state.",color:"velocity"})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-4 text-center",children:"and dozens more"})]}),e.jsxs("div",{className:"mb-12",children:[e.jsx("h3",{className:"text-xs text-muted-foreground mb-6",children:"Init Commands"}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6",children:[e.jsx(i,{variant:"horizontal",icon:N,title:"/init-all",description:"Auto-detect your stack (Laravel, Rails, TanStack, React, Vue, Tailwind, Tari, etc.) and set up framework-specific guidelines.",color:"pulse"}),e.jsx(i,{variant:"horizontal",icon:N,title:"/init-*",description:"50+ framework inits: React, Vue, Laravel, Filament, Tauri, Go CLI, Swift, and more. And the process to create your own.",color:"pulse"})]})]})]})})}function oe({stats:s,style:r}){const t=[{value:String(s.videos),label:"Videos",sublabel:`across ${s.series_count}
1 series`},{value:String(s.projects),label:"Project Logs",sublabel:`${s.active_projects} still active`},{value:"35+",label:"Downloadable Files",sublabel:"slash commands, skills, rules"},{value:String(s.guarantee_days),label:"Day Guarantee",sublabel:"full refund, no questions"}];return e.jsxs("section",{className:"section-compact px-4 md:px-10 bg-void-900 overflow-hidden angle-br-up-24 angle-line-flux-velocity",style:r,children:[e.jsx(B,{}),e.jsx("div",{className:"max-w-6xl mx-auto relative",children:e.jsx("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-4 md:gap-8 lg:gap-4",children:t.map(a=>e.jsxs("div",{className:"text-center",children:[e.jsx("span",{className:"text-5xl md:text-6xl font-medium text-void-100 tracking-tight block mb-2",children:a.value}),e.jsx("span",{className:"text-void-100/80 font-medium block mb-1",children:a.label}),e.jsx("span",{className:"text-void-100/40 text-sm",children:a.sublabel})]},a.label))})})]})}function ie({style:s,pricingOptions:r}){const[t,a]=x.useState(()=>r[0]?.seats??1),o=r.find(n=>n.seats===t)??r[0],c=o?X(o):null,m=r.map(n=>({seats:n.seats,label:n.seats===1?"1 seat":`${n.seats} seats`})),h=o?j.url({query:{price:o.priceId}}):j.url();return e.jsxs("section",{id:"pricing",className:"section px-4 md:px-10 bg-background overflow-hidden angle-br-up-24 angle-line-velocity-pulse",style:s,children:[e.jsx("div",{className:"absolute inset-0 pointer-events-none opacity-50",style:{backgroundImage:y,backgroundSize:"10px 10px"}}),e.jsxs("div",{className:"max-w-4xl mx-auto relative",children:[e.jsxs("div",{className:"text-center mb-16",children:[e.jsx("span",{className:"text-xs text-muted-foreground mb-4 block",children:"Membership"}),e.jsx("h2",{className:"text-4xl md:text-5xl lg:text-6xl font-medium tracking-tight mb-6",children:"Everything you need to start."}),e.jsx("p",{className:"text-xl text-muted-foreground max-w-2xl mx-auto",children:"You already know how to build software. This is the setup, the systems, and the workflows that let you do it faster with AI."})]}),e.jsx("div",{className:"max-w-lg mx-auto",children:e.jsxs(H,{centered:!0,size:"lg",badge:"Membership",price:c?.displayPrice??"Subscription",period:c?.period??"",featureBullet:"dot",priceSize:"lg",features:["All video series and new releases","Complete slash command library","Skills files for your stack","MCP server configs and guides","CLAUDE.md templates and rules","Project logs and build-alongs","Ongoing updates as tools evolve"],children:[m.length>1&&e.jsxs("div",{className:"mb-6",children:[e.jsx("label",{htmlFor:"seat-select",className:"sr-only",children:"Team size"}),e.jsx("select",{id:"seat-select",value:t,onChange:n=>a(Number(n.target.value)),className:"w-full h-11 px-3 rounded-sm border border-border bg-background text-foreground text-sm focus:outline-none focus:ring-2 focus:ring-velocity-500/30 appearance-none bg-[url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23666%22%20stroke-width%3D%222%22%3E%3Cpath%20d%3D%22m6%209%206%206%206-6%22%2F%3E%3C%2Fsvg%3E')] bg-[length:16px] bg-[right_12px_center] bg-no-repeat",children:m.map(n=>e.jsx("option",{value:n.seats,children:n.label},n.seats))})]}),e.jsxs("a",{href:h,className:p({size:"xl",className:"w-full text-lg"}),children:[c?.checkoutCta??"Start subscription",e.jsx(l,{className:"w-5 h-5 ml-2"})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-x-4 gap-y-1 mt-4 text-xs text-muted-foreground",children:[e.jsx("span",{children:"Cancel anytime"}),e.jsx("span",{children:"30-day full refund"})]})]})}),e.jsxs("div",{className:"mt-16 text-center",children:[e.jsx("p",{className:"text-lg text-foreground font-medium mb-2",children:"Try it for 30 days. If it doesn't change how you work, get a full refund."}),e.jsx("p",{className:"text-muted-foreground",children:"Didn't like it? No problem! Just email me at [email protected]."})]}),e.jsxs("div",{className:"mt-20 max-w-2xl mx-auto text-center",children:[e.jsx("p",{className:"text-lg text-foreground
1/80 italic mb-4 text-balance",children:'"Aaron is incredible! Every video is packed full of useful information explaining concisely."'}),e.jsx("p",{className:"text-muted-foreground",children:"— Derek Door"})]}),e.jsx(le,{})]})]})}function le(){const s=I({email:""}),r=t=>{t.preventDefault(),s.submit(q(),{preserveScroll:!0,onSuccess:()=>s.reset()})};return e.jsx("div",{className:"mt-16 max-w-xl mx-auto",children:e.jsxs($,{className:"p-6 bg-white",children:[e.jsx("p",{className:"text-muted-foreground mb-4",children:"Not ready to buy? Stay in the loop."}),s.recentlySuccessful?e.jsxs("div",{className:"flex items-center gap-2 text-pulse-500",children:[e.jsx(Y,{className:"w-4 h-4"}),e.jsx("span",{className:"text-sm",children:"You're in. Check your inbox."})]}):e.jsxs("form",{onSubmit:r,className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(M,{type:"email",placeholder:"[email protected]",value:s.data.email,onChange:t=>s.setData("email",t.target.value),className:"h-11 text-sm",disabled:s.processing,required:!0}),e.jsx(G,{type:"submit",variant:"secondary",disabled:s.processing,className:"shrink-0 min-w-[100px]",children:s.processing?e.jsx(J,{className:"w-4 h-4 animate-spin"}):"Subscribe"})]}),s.errors.email&&e.jsx("p",{className:"text-sm text-destructive",children:s.errors.email})]})]})})}function ce({faqs:s,style:r}){const t=s.map(a=>({question:a.question,answer:a.answer}));return e.jsx("section",{className:"section px-4 md:px-10 bg-background overflow-hidden angle-br-up-24 angle-line-pulse-energy",style:r,children:e.jsx(U,{items:t,sectionNumber:"05"})})}function de(){const s=x.useRef(null),r=()=>{s.current&&s.current.remove(),window.history.replaceState({},"","/")};return e.jsx("div",{ref:s,className:"fixed top-0 left-0 right-0 z-[100] bg-foreground border-b border-background/10",children:e.jsxs("div",{className:"relative px-4 py-3",children:[e.jsx("p",{className:"text-background text-sm text-center",children:"Checkout canceled — you haven't been charged."}),e.jsx("button",{onClick:r,className:"absolute right-4 top-1/2 -translate-y-1/2 text-background/60 hover:text-background transition-colors p-1","aria-label":"Dismiss",children:e.jsx(O,{className:"w-4 h-4"})})]})})}function Oe({featuredProjects:s,featuredSeries:r,featuredFieldNotes:t,stats:a,faqs:o,pricingOptions:c,checkoutCanceled:m}){const[h,n]=x.useState(!0);return e.jsxs(e.Fragment,{children:[e.jsx(C,{title:"faster. | Learn AI-Assisted Development"}),m&&e.jsx(de,{}),e.jsx(_,{visible:!h}),e.jsxs("div",{className:"bg-background text-foreground",children:[e.jsxs(T,{baseZIndex:20,children:[e.jsx(ee,{onVisibilityChange:n}),e.jsx(te,{series:r}),e.jsx(re,{notes:t}),e.jsx(se,{}),e.jsx(ae,{projects:s}),e.jsx(ne,{}),e.jsx(oe,{stats:a}),e.jsx(ie,{pricingOptions:c}),e.jsx(ce,{faqs:o})]}),e.jsx(R,{})]})]})}export{Oe as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.