Zach of all Trade

Zach of all Trade

Creative Problem Solver 🔥
Byte-Sized Content Creator 🎮
Martech Enthusiast 🔧

Creative Problem Solver 🔥
Byte-Sized Content Creator 🎮
Martech Enthusiast 🔧

Hi, I'm Zach.

Hi, I'm Zach.

Social Media
From strategy to scroll.

I’ve built and managed hundreds of social media accounts, developing content, growing audiences, and driving engagement.

Event Management
Some of the most impressive spreadsheets I've ever developed.

I’ve led large-scale internal and external events for hundreds of attendees, handling vendors, catering, lodging, transportation, logistics, and unforgettable custom experiences from start to finish.

Data Visualizations
Crafting a story with data and analytics.

I turn raw metrics into visual insights that drive smarter decisions—cutting through the noise with dashboards and visuals that make data impossible to ignore.

Video Production
For when words just aren’t enough.

Sometimes the best way to explain an idea is to show it. From creative explainer videos to deep dives into my gaming backlog, I use video to tell stories that stick.

Graphic Design
Where patterns meet people.

My aesthetic blends AI-generated pattern design with human photography, creating one-of-a-kind visuals that are never replicated, always distinct, and unmistakably intentional.

'use client';

import { useState, useEffect, useRef } from 'react';

export default function Home() {
  const [messages, setMessages] = useState<{ role: 'user' | 'assistant'; content: string }[]>([]);
  const [input, setInput] = useState('');
  const [isTyping, setIsTyping] = useState(false);
  const [dotCount, setDotCount] = useState(0);
  const bottomRef = useRef<HTMLDivElement>(null);
  
  useEffect(() => {
    if (isTyping) {
      const interval = setInterval(() => {
        setDotCount(prev => (prev + 1) % 4); // 0 → 1 → 2 → 3 → 0, looping
      }, 500); // Every half a second
      return () => clearInterval(interval); // Cleanup when typing stops
    } else {
      setDotCount(0); // Reset dots when not typing
    }
  }, [isTyping]);  

  useEffect(() => {
    bottomRef.current?.scrollIntoView({ behavior: 'smooth' });
  }, [messages]);
  
  const handleSend = async (e: React.FormEvent) => {
    e.preventDefault();
    if (!input.trim()) return;
  
    const userMessage = { role: 'user', content: input };
    setMessages(prev => [...prev, userMessage]);
    setInput('');
    setIsTyping(true);
  
    try {
      const res = await fetch('/api/chat', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({ message: input }),
      });
  
      const data = await res.json();
  
      const aiMessage = { role: 'assistant', content: data.reply };
      setMessages(prev => [...prev, aiMessage]);
    } catch (err) {
      console.error('Request failed:', err);
    } finally {
      setIsTyping(false);
    }
  }; 
  
  return (
<main className="h-screen bg-black text-white flex flex-col p-4">
<div className="flex-1 overflow-y-auto space-y-4 mb-2 pr-2">
      {messages.map((msg, idx) => (
  <div
    key={idx}
    className={`flex ${msg.role === 'user' ? 'justify-end' : 'justify-start'}`}
  >
    <div
      className={`px-4 py-2 rounded-lg max-w-md ${
        msg.role === 'user'
          ? 'bg-blue-600 text-white'
          : 'bg-gray-700 text-white'
      }`}
    >
      {msg.content}
    </div>
  </div>
))}

{isTyping && (
  <div className="bg-gray-700 px-4 py-2 rounded-lg max-w-md self-start animate-pulse">
    trAIl is typing{'.'.repeat(dotCount)}
  </div>
)}

<div ref={bottomRef} />
      </div>

      <form onSubmit={handleSend} className="flex">
        <input
          type="text"
          value={input}
          onChange={e => setInput(e.target.value)}
          placeholder="Type here..."
          className="flex-1 px-4 py-2 rounded-l-lg text-white bg-gray-700"
          />
        <button
          type="submit"
          className="bg-blue-600 px-4 py-2 rounded-r-lg hover:bg-blue-500"
        >
          Send
        </button>
      </form>
    </main>
  );
}

Artificial Intelligence
Creating a new trAIl

I turn AI into conversation, building interactive assistants with hidden goals, smart prompts, and visual flair. For trAIl, I used Next.js, OpenAI, Supabase, and Lottie to create a chat experience that listens, learns, and celebrates when it uncovers what it’s looking for. Ideal for conferences, kiosks, and lead generation scenarios.

Podcasting
AI meets the classics.

LiterAIture is my podcast where public domain books get a modern twist, summarized and narrated using AI. It’s CliffNotes meets creative tech, designed to make timeless stories more accessible (and way less dusty).

Tinkerer / Hobbyist
Creating what I can’t find.

Outside of my career, I still love to tinker, whether it's 3D printing life-size statues, rebuilding arcade machines, or crafting custom tech setups. If it doesn’t exist yet, I’ll build it.

Other side projects.

Other side projects.

Other side projects.

The Nonprofit Grant

Empowering Nonprofits, Amplifying Missions.

Never Ending Backlog

Embark on an endless journey through a gaming backlog.

Jopaza

Elevating HubSpot with guided expertise, focusing on the why.

I’m Zach Gilbert,
marketer, maker, and generalist by design.

I’m Zach Gilbert,
marketer, maker, and generalist by design.

I’ve built a career (and a life) around curiosity. I’m the kind of person who says “yeah, I’ll figure it out,” and then actually does. From launching AI-powered programs and implementing enterprise tech to designing logos, building internal systems, and hosting historical walking tours. I’ve always preferred range over repetition.

I currently lead digital marketing efforts for a global consulting firm, where I balance strategy with execution, storytelling with data, and AI with good old-fashioned common sense. Outside of work, you’ll find me restoring arcade machines, 3D printing life-sized statues, or scripting voice assistants for my workshop. I don’t just explore ideas, I build them.

I’ve built a career (and a life) around curiosity. I’m the kind of person who says “yeah, I’ll figure it out,” and then actually does. From launching AI-powered programs and implementing enterprise tech to designing logos, building internal systems, and hosting historical walking tours. I’ve always preferred range over repetition.

I currently lead digital marketing efforts for a global consulting firm, where I balance strategy with execution, storytelling with data, and AI with good old-fashioned common sense. Outside of work, you’ll find me restoring arcade machines, 3D printing life-sized statues, or scripting voice assistants for my workshop. I don’t just explore ideas, I build them.

I’ve built a career (and a life) around curiosity. I’m the kind of person who says “yeah, I’ll figure it out,” and then actually does. From launching AI-powered programs and implementing enterprise tech to designing logos, building internal systems, and hosting historical walking tours. I’ve always preferred range over repetition.

I currently lead digital marketing efforts for a global consulting firm, where I balance strategy with execution, storytelling with data, and AI with good old-fashioned common sense. Outside of work, you’ll find me restoring arcade machines, 3D printing life-sized statues, or scripting voice assistants for my workshop. I don’t just explore ideas, I build them.

Contact Zach

About Me

A versatile marketer and creative problem-solver, I’ve driven million-dollar campaigns, boosted social media follower growth by 1,000%, and built content studios. With the adaptability of a firefighter, I embrace tech, tackle challenges head-on, and deliver results with a hands-on approach.