irongit

content: more terminal-only background, opinions, and favorites

huncholanehuncholaneauthored
parent 34823cacommit 42a52fd6cd69abde443b5619c66a8d6dc515a4e1Browse files

2 files changed, +94 -25

+93-24src/data/profile.ts
@@ -456,30 +456,99 @@ export function profileText(): string {
456456
457457 // Personal details for the AI terminal only. They are not rendered on the page
458458 // and not included in /llms.txt (which crawlers index); the worker bundles
459-// this text into the terminal's system prompt.
460-export const personal = {
461- favoriteColor: 'Orange',
462- teams: {
463- college: 'Tennessee Volunteers (every sport)',
464- nfl: 'San Francisco 49ers',
465- nba: 'Golden State Warriors',
466- },
467- hobbies: ['surfing', 'snowboarding', 'video games', 'working out', 'coding'],
468- height: '6\'4"',
469- weight: '230 lb',
470- favoriteLanguage:
471- 'Rust, because it is both safe and efficient, where C is efficient but risky. Lane is not a fan of garbage collectors.',
472-};
459+// this text into the terminal's system prompt. Written in the third person.
460+export const personal: { title: string; items: string[] }[] = [
461+ {
462+ title: 'Basics',
463+ items: [
464+ 'Pronouns: he/him.',
465+ 'Height and weight: 6\'4", 230 lb.',
466+ 'Favorite color: orange.',
467+ 'Grew up all over the country: born in Mississippi, then lived in Oklahoma, Charleston, Pinehurst, Monterey (California), Fairfax (Virginia), and Fairfield (California). He moved to Tennessee for college after being a Tennessee football fan his whole life.',
468+ 'Pets: had dogs growing up; none since living on his own.',
469+ ],
470+ },
471+ {
472+ title: 'What he wants next',
473+ items: [
474+ 'Top choices: remote, or on-site in Reno. He will relocate if needed and is fine traveling for work.',
475+ 'Why drones: he thinks drones are the best vehicle for AI, because they can go anywhere.',
476+ ],
477+ },
478+ {
479+ title: 'How he got into programming',
480+ items: [
481+ 'He got into programming after starting his computer science major. He had loved working out since high school and kept writing workout plans in his notes, so he built a website that generated the workouts for him instead.',
482+ 'He called it Lit Lifter. It was written in Python and hosted for free on PythonAnywhere. The stack was rough, but he and his friends loved it, and the workout tables had a Lamborghini in the background.',
483+ ],
484+ },
485+ {
486+ title: 'Proudest work and hardest bug',
487+ items: [
488+ 'Proudest early skill: parsing large PDF files into JSON, back when code was still written by hand.',
489+ 'Proudest today: the Hygo CRM stack, because it will scale while keeping prices down.',
490+ 'Hardest bug: normalized trips and revisions in the FlyingBytes app. He jumped through the code in Vim, collected the suspect spots in the quickfix list, and wrote SQL outside the codebase to print nicely formatted data while hunting. The cause: hotels needed an extra level of uniqueness.',
491+ ],
492+ },
493+ {
494+ title: 'Current focus',
495+ items: [
496+ 'He has been on a tear using Claude to convert bulky garbage-collected systems into Rust, so he can self-host many services cheaply.',
497+ 'Next goal: make FlyingBytes fast worldwide with replicated databases and cheap servers in Tokyo and Berlin (cheap because the backend is now Rust), while writes still go to the main server in California. Pilots are all over the globe.',
498+ ],
499+ },
500+ {
501+ title: 'Setup',
502+ items: [
503+ 'Editor: Neovim, with a tmux session for each project.',
504+ 'Astrum, his own stack template: an Axum backend that serves the compiled Astro frontend and hot reloads it the way Astro or Next.js dev servers do. No CORS to deal with, an extremely efficient backend, and a fast frontend dev cycle.',
505+ 'Favorite language: Rust, because it is both safe and efficient, where C is efficient but risky. He is not a fan of garbage collectors.',
506+ 'Tabs over spaces, because tabs are more efficient.',
507+ ],
508+ },
509+ {
510+ title: 'Engineering opinions',
511+ items: [
512+ 'Serverless architectures are mostly a scam. He would rather own intelligently located servers and handle database replication and load balancing himself.',
513+ 'Cloud services are best for caching and file storage: no reason to bloat a server with files that cloud storage can replicate cheaply.',
514+ 'SQL is perfect as it is, and he does not like ORMs. Django has an awesome ORM, but he still prefers plain PostgreSQL, mostly because the cascade wrapper makes debugging with SQL painful.',
515+ 'Microservices make sense in specific cases, like his Frankfurter fork for FlyingBytes, which does not need to live in every server instance.',
516+ 'He loves Claude. He tried a hyped alternative, but Claude is where it is at.',
517+ ],
518+ },
519+ {
520+ title: 'Sports',
521+ items: [
522+ 'College: Tennessee Volunteers, every sport.',
523+ 'NFL: San Francisco 49ers. NBA: Golden State Warriors.',
524+ ],
525+ },
526+ {
527+ title: 'Hobbies',
528+ items: [
529+ 'Surfing, snowboarding, video games, working out, and coding. Most of his free time ends up going into building software.',
530+ "Best surf spot: Cowell's in Santa Cruz. Best mountain for snowboarding: Heavenly.",
531+ ],
532+ },
533+ {
534+ title: 'Games',
535+ items: [
536+ "All-time favorite: Sid Meier's Civilization. He loves strategy games.",
537+ 'Lately he plays a lot of chess, since it is easy on his phone. He loved Pokemon as a kid and still plays it on his phone sometimes, and Minecraft is in his top list too.',
538+ 'Also: Call of Duty, Grand Theft Auto IV and V, Halo 3 and Reach (and the ODST story), and Skyrim, for the goofiness, the exploits, and the skill grinding. He got deep into Warzone with friends in college and for a while after.',
539+ ],
540+ },
541+ {
542+ title: 'Food',
543+ items: ['Favorite: chips and queso. He loves chicken wings. Steak is amazing, but only the good stuff, like ribeye.'],
544+ },
545+];
473546
474547 export function personalText(): string {
475- return [
476- '## Personal (for casual questions; not shown on the page)',
477- `- Favorite color: ${personal.favoriteColor}`,
478- `- College team: ${personal.teams.college}`,
479- `- NFL team: ${personal.teams.nfl}`,
480- `- NBA team: ${personal.teams.nba}`,
481- `- Hobbies: ${personal.hobbies.join(', ')}. Most of his free time ends up going into building software.`,
482- `- Height and weight: ${personal.height}, ${personal.weight}`,
483- `- Favorite programming language: ${personal.favoriteLanguage}`,
484- ].join('\n') + '\n';
548+ const out = ['## Personal (for casual questions; not shown on the page)'];
549+ for (const sec of personal) {
550+ out.push(`### ${sec.title}`);
551+ for (const item of sec.items) out.push(`- ${item}`);
552+ }
553+ return out.join('\n') + '\n';
485554 }
+1-1worker/index.ts
@@ -40,7 +40,7 @@ Rules:
4040 - If the profile does not cover something, say so plainly and suggest emailing lane@henslee.me. Never invent employers, dates, numbers, clients, or personal details.
4141 - Never share a phone number or home address.
4242 - For hiring, contracting, or contact questions, point to lane@henslee.me.
43-- The Personal section is for casual questions (teams, hobbies, favorites). Share it when asked, but keep it out of answers about work unless it is relevant.
43+- The Personal section covers Lane's background, what he wants next, his setup, opinions, and hobbies. Use it when asked or when it is relevant (his work preferences and engineering opinions often are), but do not pad work answers with hobbies or favorites.
4444 - Stay on topic: Lane, his work, skills, and interests, and how to reach him. Politely decline unrelated tasks.
4545 - The terminal also has slash commands (typing / lists them, /email opens mail, /copy copies the address). Mention them only when useful.
4646