[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"casestudies":3},[4,320,467,585,762,1384,1472,1629,1674,1750,1816,1947,2013,2098,2155,2253,2366,2715,2800,2992,3071,3152,3231,3280,3347,3433,3497,3568],{"id":5,"title":6,"body":7,"client":261,"credits":262,"description":288,"extension":289,"featured":290,"gallery":291,"geo":292,"keyart":294,"lede":297,"mediaType":298,"meta":300,"navigation":301,"path":302,"seo":303,"sort":304,"status":305,"stem":306,"tags":307,"vertical":316,"year":317,"yt_video":318,"__hash__":319},"casestudies\u002Fwork\u002Fblue-five-collective-down-by-the-water.md","\"Down by the Water\"",{"type":8,"value":9,"toc":251},"minimark",[10,15,23,26,37,42,53,57,76,80,83,97,100,104,130,143,147,155,159,226,231],[11,12,14],"h1",{"id":13},"what-it-is","What it is",[16,17,18,22],"p",{},[19,20,21],"em",{},"Down by the Water"," is a podcast-led documentary project about communities meeting climate change at the water's edge and shaping an era of renewal along American shorelines. The audio podcast is the front door. A companion limited documentary series for PVOD is the long-form expression. The stories come from inside waterfront neighborhoods, from the community leaders, residents, and business owners building resilience, equity, and access into the places they live.",[16,24,25],{},"Season 1 anchors in New York City and New Jersey: Bronx Point in the South Bronx, Brooklyn and Queens, the Jersey shore. Future seasons can pick up any American shoreline where the same question is live.",[16,27,28,29,36],{},"Project site: ",[30,31,35],"a",{"href":32,"rel":33},"https:\u002F\u002Fdownbythewater.org",[34],"nofollow","DownByTheWater.org",".",[38,39,41],"h2",{"id":40},"subject","Subject",[16,43,44,45,48,49,52],{},"The series takes listeners and viewers to the edge of transformation in waterfront neighborhoods. The themes are resilience, equity, accessibility, and the convergence of people, culture, and climate solutions. Episode subjects include future residents of Bronx Point, young activists in Queens, the Billion Oyster Project, a Brooklyn port operator, and long-time New Yorkers and Jersey residents whose lived experience is the substance of the season. Every story carries two perspectives in parallel: the ",[19,46,47],{},"industry"," view (developers, planners, public officials, regulatory context) and the ",[19,50,51],{},"human"," view (residents, organizers, lived experience). Neither one is allowed to do the talking alone.",[38,54,56],{"id":55},"themes","Themes",[58,59,60,64,67,70,73],"ul",{},[61,62,63],"li",{},"Coastal and waterfront climate adaptation at the neighborhood scale.",[61,65,66],{},"Public-private development and the community engagement that actually shapes it.",[61,68,69],{},"Equity and accessibility in urban waterfront redevelopment.",[61,71,72],{},"Cultural heritage and place. Bronx Point as a hip-hop origin site. \"250 Years Afloat.\"",[61,74,75],{},"The convergence of industry and human perspectives in every story.",[38,77,79],{"id":78},"format","Format",[16,81,82],{},"Two formats in one project.",[58,84,85,91],{},[61,86,87,90],{},[19,88,89],{},"Podcast"," (audio plus visualizer video). The front door. Built for listening platforms first, with a visualizer cut for YouTube and social.",[61,92,93,96],{},[19,94,95],{},"Limited documentary series"," (PVOD). The long-form companion, drawing the same cast and story arcs into cinematic shape for a transactional video-on-demand audience.",[16,98,99],{},"Season 1 is planned as a 15-episode arc with a dual-frame template that pairs an industry perspective with a community perspective on every subject. The early episodes anchor in Bronx Point and the South Bronx; the season then opens out to Brooklyn, Queens, and the Jersey shore.",[38,101,103],{"id":102},"production-model","Production model",[16,105,106,108,109,113,114,119,120,125,126,129],{},[19,107,21],{}," is the ",[30,110,112],{"href":111},"\u002Fwork\u002Ffive59-labs-voicesflow-platform","VoicesFlow platform's"," first co-production. It is run jointly by ",[30,115,118],{"href":116,"rel":117},"https:\u002F\u002Ffive59.com",[34],"Five59 Labs"," and ",[30,121,124],{"href":122,"rel":123},"https:\u002F\u002Foutbluesolutions.com",[34],"Out of the Blue Solutions"," under the ",[19,127,128],{},"Blue Five Collective"," banner, in association with Waterfront Alliance.",[16,131,132,133,119,136,139,140,142],{},"That structure matters. Where the platform's other topical projects (",[19,134,135],{},"The River We Build",[19,137,138],{},"13 Degrees",") are Five59 Labs solo productions, ",[19,141,21],{}," is the prototype for how VoicesFlow takes on external co-producers and association partners. The patterns that come out of this co-production (creative authority, editorial decision-making, distribution rights, branding) become reusable when the platform brings on the next outside partner.",[38,144,146],{"id":145},"my-role","My role",[16,148,149,150,154],{},"I am co-Executive Producer with ",[30,151,153],{"href":122,"rel":152},[34],"Sivan Schlecter"," of Out of the Blue Solutions. My side of the work covers editorial and creative direction, the documentary cut of the project, the platform integration into VoicesFlow, and the production craft Five59 Labs brings to the partnership.",[38,156,158],{"id":157},"where-it-sits-in-the-platform","Where it sits in the platform",[160,161,162,178],"table",{},[163,164,165],"thead",{},[166,167,168,172,175],"tr",{},[169,170,171],"th",{},"Project",[169,173,174],{},"Topic",[169,176,177],{},"Lead format(s)",[179,180,181,197,213],"tbody",{},[166,182,183,191,194],{},[184,185,186],"td",{},[30,187,189],{"href":188},"\u002Fwork\u002Ffive59-labs-the-river-we-build",[19,190,135],{},[184,192,193],{},"Women-led water justice, global",[184,195,196],{},"Limited series, traveling exhibit, Atlas",[166,198,199,207,210],{},[184,200,201],{},[30,202,204,206],{"href":203},"\u002Fwork\u002Ffive59-labs-13-degrees",[19,205,138],{}," (XR)",[184,208,209],{},"Midwestern climate justice (Columbus heat × redlining)",[184,211,212],{},"XR \u002F immersive",[166,214,215,220,223],{},[184,216,217,219],{},[19,218,21],{}," (this project)",[184,221,222],{},"American shoreline climate resilience",[184,224,225],{},"Podcast, limited documentary series",[16,227,228,230],{},[19,229,21],{},"'s distinct contributions to the umbrella:",[58,232,233,239,245],{},[61,234,235,238],{},[19,236,237],{},"First podcast-led project."," Extends the format toolkit beyond film, exhibit, digital, and XR.",[61,240,241,244],{},[19,242,243],{},"First PVOD distribution path",", rather than festival, broadcast, or installation.",[61,246,247,250],{},[19,248,249],{},"First co-production"," with an external production company and an association partner. The organizational pattern the platform will reuse as it scales.",{"title":252,"searchDepth":253,"depth":253,"links":254},"",2,[255,256,257,258,259,260],{"id":40,"depth":253,"text":41},{"id":55,"depth":253,"text":56},{"id":78,"depth":253,"text":79},{"id":102,"depth":253,"text":103},{"id":145,"depth":253,"text":146},{"id":157,"depth":253,"text":158},"Blue Five Collective \u002F VoicesFlow",[263,268,272,276,278,282,286],{"sort":264,"role":265,"value":266,"uri":267},10,"Platform","VoicesFlow","https:\u002F\u002Fvoicesflow.org",{"sort":269,"role":270,"value":128,"uri":271},20,"Co-Production","https:\u002F\u002Fbluefivecollective.com\u002F",{"sort":273,"role":274,"value":118,"uri":275},21,"Production Company","https:\u002F\u002Ffive59.com\u002F",{"sort":277,"role":274,"value":124,"uri":122},22,{"sort":279,"role":280,"value":281},30,"Association Partner","Waterfront Alliance",{"sort":283,"role":284,"value":285},40,"Executive Producer","Andrew Marconi",{"sort":287,"role":284,"value":153},41,"Down by the Water is a podcast-led documentary project about communities meeting climate change at the water's edge and shaping an era of renewal along American shorelines. The audio podcast is the front door. A companion limited documentary series for PVOD is the long-form expression. The stories come from inside waterfront neighborhoods, from the community leaders, residents, and business owners building resilience, equity, and access into the places they live.","md",false,[],[293],"North America",{"src":295,"alt":296},"\u002Fwork\u002Fblue-five-collective-down-by-the-water\u002Fdbtw-titlecard.jpg","\"Down by the Water\" — a podcast-led documentary on American shoreline climate resilience","A podcast-led documentary project on how American shoreline communities are meeting climate change and shaping renewal at the water's edge. The VoicesFlow platform's first co-production.",[299,89],"Documentary Film",{},true,"\u002Fwork\u002Fblue-five-collective-down-by-the-water",{"title":6,"description":288},13,"live","work\u002Fblue-five-collective-down-by-the-water",[308,89,309,310,311,312,313,314,315],"Documentary","Limited Series","Climate Resilience","Urban Development","Waterfront","Media Production","Equity","Social Justice","Water","2025-Present",null,"ToeTWVmpL_96PJ1HMX2rBifu6uVR_rrTBMQC30QhjZI",{"id":321,"title":322,"body":323,"client":434,"credits":435,"description":252,"extension":289,"featured":290,"gallery":441,"geo":446,"keyart":447,"lede":449,"mediaType":450,"meta":452,"navigation":301,"path":453,"seo":454,"sort":269,"status":305,"stem":455,"tags":456,"vertical":464,"year":465,"yt_video":318,"__hash__":466},"casestudies\u002Fwork\u002Fohio-crisis-response-team-web-platform.md","Web Platform & Member Portal",{"type":8,"value":324,"toc":424},[325,329,332,335,338,342,345,348,352,360,363,366,369,373,376,379,383,386,389,391,394,397,400,404,412,416],[38,326,328],{"id":327},"overview","Overview",[16,330,331],{},"When crisis strikes, Ohio responds. Since 1996, the Ohio Crisis Response Team has been the small non-profit that arrives in the moments, days, and weeks after a community is shattered. A natural disaster. An act of mass violence. A tragic accident. Their volunteer responders provide immediate, on-scene support to people in the hardest hours of their lives.",[16,333,334],{},"Thirty years and more than 400 deployments later, the team needed digital infrastructure that could keep up with the work without becoming the work.",[16,336,337],{},"That's what I'm helping them build.",[38,339,341],{"id":340},"responders-before-operators","Responders before operators",[16,343,344],{},"OCRT runs on a very small volunteer staff and a roster of community volunteers, most of them clinicians, first responders, and peer counselors. They are responders before they are computer operators. Every minute one of them spends fighting a tool is a minute they are not with the people they showed up for.",[16,346,347],{},"So the brief wrote itself. What does this team need their digital home to do, and how do I make it disappear into the work? That question shaped every decision that followed.",[38,349,351],{"id":350},"the-public-site","The public site",[16,353,354,359],{},[30,355,358],{"href":356,"rel":357},"https:\u002F\u002Fohiocrisisresponseteam.org",[34],"OhioCrisisResponseTeam.org"," is live. It is the front door for the people who actually call OCRT in: law enforcement and emergency-management leaders, school superintendents, local-government officials with the authority to formally request a deployment.",[16,361,362],{},"For them, the site has one job. Answer the questions a public-safety leader has at two in the morning, before they pick up the phone. What does this team do. Who are these responders. How do I invite them in. Plain language, no charity-speak, no jargon. The writing speaks to a decision-maker in a hard moment, not to a donor at a gala. The site also carries the team's outreach, so funders can see the work and a wavering partner can find their answers without a meeting.",[16,364,365],{},"The harder problem was everyone else the site has to reach. When OCRT deploys, the affected community is whoever was there, and in Ohio that is rarely one language and one background. So the site is built to meet people where a crisis finds them. It ships in eleven languages: Arabic, English, Spanish, French, Hindi, Russian, Somali, Swahili, Turkish, Vietnamese, and Simplified Chinese. That list is not decorative. It maps onto the immigrant and refugee communities who actually live in Ohio's cities, the Somali families in Columbus among them. The framework is built and running. The translations themselves are waiting on native-speaker validation before I will call them done, because a message meant to reach someone on their worst day, delivered in machine-translated approximations, does more harm than no translation at all. I want receipts on every locale before it carries weight.",[16,367,368],{},"Trauma-informed design shapes the tone as much as the structure. A person reaching this site may have just lived through the worst day of their life. The content does not perform urgency or sentiment. It states what help exists and how to reach it, then it gets out of the way.",[38,370,372],{"id":371},"the-quiet-craft-underneath","The quiet craft underneath",[16,374,375],{},"None of that should be visible to the people using it. The site runs as a Nuxt 4 application in a TypeScript monorepo, with the public site and the member portal sharing one codebase and one deployment pipeline. The multilingual system is wired through the framework rather than bolted onto the side, so correcting or adding a language is a content change, not an engineering project the team has to call me to run.",[16,377,378],{},"I am not going to pretend any of this is exotic. It is current, well-supported, deliberately boring technology, chosen precisely because it is. A volunteer-run non-profit cannot carry a clever stack that needs a specialist on retainer. The craft here is in what the team never has to think about: the site loads fast, holds up under the traffic spike that follows a public incident, and does not break when nobody is watching it.",[38,380,382],{"id":381},"the-member-portal","The member portal",[16,384,385],{},"The member portal is the second front, and it is still in active build-out. This is where active responders will manage their certifications, training records, deployment availability, and the paperwork that follows a deployment.",[16,387,388],{},"The design priority is the same one from the start, pointed inward. Every screen reads in a glance. Every action takes the fewest clicks I can get it down to. The system absorbs the mundane administrative work, so a volunteer who just got home from a deployment can close out their record in a few minutes and go be a person again. It is not live yet, and I am not going to dress up a work in progress as a finished thing. When it ships, it should feel like it was always there.",[38,390,146],{"id":145},[16,392,393],{},"I am wearing two hats. The first is advisor: helping a small non-profit get its digital posture current without drowning the people who run it. Choosing tools they can sustain after I am gone. Making each technology decision earn its keep against the mission, and saying no to the ones that don't.",[16,395,396],{},"The second is builder: a public site they are proud to point a partner at, and a portal their responders will actually want to open.",[16,398,399],{},"The work I want more of looks like this one. An organization doing something that matters, run by people stretched thin, who need the infrastructure to simply hold so they can do the part only humans can do.",[38,401,403],{"id":402},"status","Status",[16,405,406,407,411],{},"The public site is live at ",[30,408,410],{"href":356,"rel":409},[34],"ohiocrisisresponseteam.org",", shipping in eleven languages with native-speaker validation underway. The member portal is in active build-out.",[38,413,415],{"id":414},"references","References",[58,417,418],{},[61,419,420,421],{},"Public site: ",[30,422,410],{"href":356,"rel":423},[34],{"title":252,"searchDepth":253,"depth":253,"links":425},[426,427,428,429,430,431,432,433],{"id":327,"depth":253,"text":328},{"id":340,"depth":253,"text":341},{"id":350,"depth":253,"text":351},{"id":371,"depth":253,"text":372},{"id":381,"depth":253,"text":382},{"id":145,"depth":253,"text":146},{"id":402,"depth":253,"text":403},{"id":414,"depth":253,"text":415},"Ohio Crisis Response Team",[436,439],{"sort":437,"role":438,"value":285},1,"Architect & Developer",{"sort":264,"role":440,"value":434,"uri":356},"Client",[442,444],{"src":443,"alt":252},"\u002Fwork\u002Fohio-crisis-response-team-web-platform\u002Focrt-slide2.jpg",{"src":445,"alt":252},"\u002Fwork\u002Fohio-crisis-response-team-web-platform\u002Focrt-slide3.jpg",[293],{"src":448,"alt":434},"\u002Fwork\u002Fohio-crisis-response-team-web-platform\u002Focrt-keyart.jpg","Technology advisor and platform builder for the Ohio Crisis Response Team, building the digital home for a thirty-year-old non-profit whose volunteers show up for Ohio communities in the hours after disaster and mass violence.",[451],"Web Application",{},"\u002Fwork\u002Fohio-crisis-response-team-web-platform",{"title":322,"description":252},"work\u002Fohio-crisis-response-team-web-platform",[457,458,459,460,461,462,463],"Nuxt","Vue","TypeScript","Monorepo","Multilingual \u002F i18n","Trauma-Informed Design","Crisis Response","Non-Profit",2026,"cKNSpBO_oyxD73darI_Xjl8u-K7MfVBocwnBzDrNXv0",{"id":468,"title":469,"body":470,"client":521,"credits":522,"description":534,"extension":289,"featured":290,"gallery":535,"geo":560,"keyart":564,"lede":567,"mediaType":568,"meta":570,"navigation":301,"path":571,"seo":572,"sort":279,"status":305,"stem":573,"tags":574,"vertical":582,"year":583,"yt_video":318,"__hash__":584},"casestudies\u002Fwork\u002Fapple-iad-platform-evangelism.md","Platform Evangelism & Advising",{"type":8,"value":471,"toc":515},[472,476,479,482,486,489,492,496,499,502,506,509,512],[38,473,475],{"id":474},"what-it-was","What it was",[16,477,478],{},"iAd was Apple's premium ad platform, running on iOS, iPadOS, tvOS, and the iTunes ecosystem. Brands paid a premium because the inventory carried Apple's trust and the units could do things nothing else in the mobile-ad market could do at the time: full-screen takeovers that opened mini-experiences, deep platform integrations, custom interactions tuned to a single device family.",[16,480,481],{},"Based in New York City, I was one of three creative technologists embedded in Apple's iAd team. The role was twofold: advising the global brands buying inventory, and the agencies producing the work, on what the platform could actually do; and partnering directly on the build of standout campaigns.",[38,483,485],{"id":484},"the-work","The work",[16,487,488],{},"I worked with brand teams and creative agencies on campaigns for brands such as Pepsi, Macy's, GEICO, Lay's, Clarins, Procter & Gamble, American Express, Laika Entertainment, and others. The job was to translate brand intent into iAd's specific creative language, then pull through the engineering side of execution so the unit shipped on Apple's specs and on the brand's schedule.",[16,490,491],{},"The eight campaigns in the gallery are a sample. Pepsi's \"Real Big Summer.\" Macy's \"Brasil.\" Lay's \"Do Us a Flavor.\" Lipton's \"Win an Extra Saturday.\" GEICO's \"Money Badger\" claymation campaign. Clarins \"Double Serum.\" Charmin Ultra Strong's multi-platform run. Febreze \"Sleep Serenity.\" Each one had to live up to its brand and earn its place on a premium platform that didn't have to take it.",[38,493,495],{"id":494},"the-model","The model",[16,497,498],{},"Mobile advertising in 2012 was already splitting into two paths. One was bespoke craft: hand-tuned units in a closed ecosystem, sold at a premium because they could carry a story rather than just an impression. The other was programmatic: cheap inventory traded by algorithm, optimized for volume and price.",[16,500,501],{},"iAd was the bespoke path, and from inside the team you could feel both why brands wanted in and why the model was getting harder to sell. The campaigns that ran on iAd consistently beat their KPIs. That was the point of paying a premium for them. But for every brand that valued a beautifully built one-screen experience, there were nine that wanted ten times the impressions for the same money, regardless of how those impressions felt.",[38,503,505],{"id":504},"what-it-taught-me","What it taught me",[16,507,508],{},"Apple shut iAd down a few years later. The bespoke model lost to the cheap, scalable, programmatic one. That outcome wasn't about iAd in particular. It was an early case of a pattern I've watched repeat in every part of the industry I've worked in since: well-crafted, human-paced work getting outcompeted on price by a generic, automated alternative that's just good enough.",[16,510,511],{},"The work I did for Apple was some of the highest-craft advertising any of those brands shipped that year. That's the thing I take with me: how to do that level of work, what it costs to do it, and where in a market it can still earn its keep.",[16,513,514],{},"That question is a more important one now than it was when iAd was running. Same dynamic, larger stakes.",{"title":252,"searchDepth":253,"depth":253,"links":516},[517,518,519,520],{"id":474,"depth":253,"text":475},{"id":484,"depth":253,"text":485},{"id":494,"depth":253,"text":495},{"id":504,"depth":253,"text":505},"Apple iAd",[523,526,531],{"sort":437,"role":524,"value":285,"uri":525},"Experience Design Lead","http:\u002F\u002Flinkedin.com\u002Fin\u002Fmarconi",{"sort":527,"role":528,"value":529,"uri":530},5,"Ad Platform","Apple iAds (iOS and tvOS Devices)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIAd",{"sort":264,"role":532,"value":533},"Client Brands","PepsiCo, Macy's, Lay's, Procter & Gamble, Clarins, American Express, Laika Entertainment, and others","This position focused on leveraging creative technology and design expertise to advance Apple's digital advertising offerings, particularly within the ecosystem aligned with the iAd platform.",[536,539,542,545,548,551,554,557],{"src":537,"caption":538},"\u002Fwork\u002Fapple-iad-platform-evangelism\u002Fboxtrolls-australia-iad-unit.jpg","BoxTrolls (Australia) iAd Unit",{"src":540,"caption":541},"\u002Fwork\u002Fapple-iad-platform-evangelism\u002Fmacys-brasil-iad-campaign.jpg","Macy's \"Brasil\" iAd Campaign",{"src":543,"caption":544},"\u002Fwork\u002Fapple-iad-platform-evangelism\u002Flays-do-us-a-flavor-iad-campaign.jpg","Lay's \"Do Us a Flavor\" iAd Campaign",{"src":546,"caption":547},"\u002Fwork\u002Fapple-iad-platform-evangelism\u002Ffebreze-sleep-serenity-iad-campaign.jpg","Febreze \"Sleep Serenity\" iAd Campaign",{"src":549,"caption":550},"\u002Fwork\u002Fapple-iad-platform-evangelism\u002Flipton-iced-tea-win-an-extra-saturday-iad-campaign.jpg","Lipton Iced Tea \"Win an Extra Saturday\" iAd Campaign",{"src":552,"caption":553},"\u002Fwork\u002Fapple-iad-platform-evangelism\u002Fgeico-money-badger-claymation-driven-iad-campaign.jpg","GEICO \"Money Badger\" Claymation-Driven iAd Campaign",{"src":555,"caption":556},"\u002Fwork\u002Fapple-iad-platform-evangelism\u002Fcharmin-ultra-strong-multi-platform-iad-campaign.jpg","Charmin Ultra Strong Multi-Platform iAd Campaign",{"src":558,"caption":559},"\u002Fwork\u002Fapple-iad-platform-evangelism\u002Fclarins-double-serum-iad-campaign.jpg","Clarins \"Double Serum\" iAd Campaign",[561,562,293,563],"Europe","Oceania","South America",{"src":565,"alt":566},"\u002Fwork\u002Fapple-iad-platform-evangelism\u002Fpepsis-real-big-summer-campaign.jpg","Pepsi's \"Real Big Summer\" Campaign","Creative-technology advisor at Apple, partnering with brands and their creative agencies (Pepsi, Macy's, GEICO, Lay's, Clarins) to turn iAd campaigns into storytelling that beat KPIs.",[569],"Advisory",{},"\u002Fwork\u002Fapple-iad-platform-evangelism",{"title":469,"description":534},"work\u002Fapple-iad-platform-evangelism",[575,576,577,578,579,580,581],"B2C","CPG","Beauty","Food","Retail","Entertainment","Financial","Advertising",2012,"YXA-o3p9byKzS5Ly0028iZTdzCV47Eqwr66JaMXtHPc",{"id":586,"title":587,"body":588,"client":728,"credits":729,"description":742,"extension":289,"featured":290,"gallery":743,"geo":744,"keyart":746,"lede":748,"mediaType":749,"meta":750,"navigation":301,"path":751,"seo":752,"sort":283,"status":305,"stem":753,"tags":754,"vertical":760,"year":465,"yt_video":318,"__hash__":761},"casestudies\u002Fwork\u002Fdevelopment-generative-creative-lab.md","Generative Creative Lab",{"type":8,"value":589,"toc":718},[590,594,597,600,603,607,610,613,625,632,635,640,643,657,661,664,689,693,696,707,711],[38,591,593],{"id":592},"a-fragmented-global-canvas","A fragmented global canvas",[16,595,596],{},"Global ad spend is forecast to pass $1 trillion for the first time in 2026, driven by digital platforms and what's being called the \"Algorithmic Era,\" where visibility lives or dies on high-velocity, highly relevant content. As brands chase that scale, they hit a wall: cultural adaptation.",[16,598,599],{},"\"One-size-fits-all\" content doesn't work. Markets are linguistic and cultural zones, not borders. Spanish for Mexico is not Spanish for Argentina is not Spanish for Spain — get it wrong and you alienate or embarrass the brand. Quebec's Bill 96 mandates French predominance in advertising. The UAE has new media laws and AI oversight. Audiences in the Gulf and South India report feeling badly underrepresented in mainstream advertising.",[16,601,602],{},"The problem: creative teams are overwhelmed. They need high-fidelity visuals and TV scripts adapted across dozens of markets at once. The tools are fragmented. Teams juggle different generative models by hand, while script adaptation runs through slow translation pipelines that miss the cultural read. No unified workbench existed for this.",[38,604,606],{"id":605},"the-project-generative-creative-lab","The project: Generative Creative Lab",[16,608,609],{},"Generative Creative Lab is a modular framework built to augment, not replace, human creativity. It's a workbench for creatives to experiment with current generative models.",[16,611,612],{},"Built on Python and Django, the platform integrates three creative pipelines:",[614,615,616,619,622],"ol",{},[61,617,618],{},"Multi-Model Visual Generation: a system to generate concept art and storyboards using a range of diffusion models.",[61,620,621],{},"TV Spot Adaptation: a multi-agent pipeline that adapts scripts culturally and linguistically.",[61,623,624],{},"Audience Segmentation: a data-driven framework for defining target personas from demographic and psychographic vectors.",[16,626,627,628,631],{},"The project's working philosophy is ",[19,629,630],{},"human-centered creativity",": AI as a tool for rapid prototyping and iteration, with the human director keeping final say on the artistic vision.",[16,633,634],{},"The Lab pulls fragmentation into one extensible architecture that handles the heavy logic under the hood and gives creatives a clean interface to explore.",[636,637,639],"h3",{"id":638},"the-model-palette-strategy","The \"Model Palette\" strategy",[16,641,642],{},"No single AI model is right for every task. The Lab uses a \"Model Palette\" approach — a unified interface over a range of diffusion architectures, so creatives can match the model to the job:",[58,644,645,648,651,654],{},[61,646,647],{},"Rapid prototyping: Z-Image Turbo and SDXL Turbo are tuned for speed (4–9 steps) for real-time ideation.",[61,649,650],{},"Photorealism: for final renders, the system switches to Juggernaut XL v9 or Realistic Vision v5.1, which handle realistic textures and lighting well.",[61,652,653],{},"Prompt fidelity: Qwen-Image-2512 handles tasks that need strict adherence to complex prompts.",[61,655,656],{},"Stylization: dynamic loading of LoRAs (Low-Rank Adaptations) fetched from CivitAI, so teams can apply specific styles (anime, line art) to base models on the fly.",[636,658,660],{"id":659},"the-cultural-adaptation-pipeline","The cultural adaptation pipeline",[16,662,663],{},"The technically hardest piece is the Multi-Agent Adaptation Pipeline. Built on LangGraph, it automates the localization of TV commercial scripts.",[58,665,666,669,672],{},[61,667,668],{},"Data-driven context: a database of \"Adaptation Profiles\" covers 20+ linguistic-cultural zones (DACH, MENA Arabic, US Hispanic) rather than just countries.",[61,670,671],{},"Routing: the system picks the best LLM for the target language. East Asian tasks (Chinese, Japanese, Korean) route to Qwen2.5-7B-Instruct for its multilingual benchmarks; German routes to Mistral-7B variants.",[61,673,674,675],{},"The workflow:\n",[614,676,677,680,683,686],{},[61,678,679],{},"Concept extraction: an AI agent reads the origin script to pull out core themes and visual metaphors.",[61,681,682],{},"Cultural research: a research agent queries the internal knowledge base for market regulations (alcohol restrictions in the UAE) and cultural values.",[61,684,685],{},"Script rewriting: a writer agent generates a localized script, adapting idioms and visual cues.",[61,687,688],{},"Storyboard generation: the system writes prompt descriptions for every shot in the new script and feeds them into the diffusion engine to visualize the localized spot.",[636,690,692],{"id":691},"technical-architecture-for-scale","Technical architecture for scale",[16,694,695],{},"Running multiple AI models is heavy. The backend handles it with:",[58,697,698,701,704],{},[61,699,700],{},"Async processing: long-running tasks (image generation, script analysis) offload to Celery workers backed by a Valkey (Redis-compatible) broker.",[61,702,703],{},"GPU safety: a single-threaded \"solo\" pool manages GPU context safety (CUDA\u002FMPS) and prevents memory corruption when switching between large models like Flux and SDXL.",[61,705,706],{},"Observability: Grafana and Loki for real-time logging, so developers can watch prompt performance and generation errors.",[38,708,710],{"id":709},"conclusion","Conclusion",[16,712,713,714,717],{},"Generative Creative Lab turns the mess of AI tools into a disciplined production pipeline. Pairing the speed of Turbo models with the cultural read of region-specific LLMs lets agencies scale to the $1 trillion ad market without losing cultural relevance or creative quality. It moves past translation toward ",[19,715,716],{},"transcreation",": a brand's message that actually lands in Mumbai or Quebec, not just shows up there.",{"title":252,"searchDepth":253,"depth":253,"links":719},[720,721,727],{"id":592,"depth":253,"text":593},{"id":605,"depth":253,"text":606,"children":722},[723,725,726],{"id":638,"depth":724,"text":639},3,{"id":659,"depth":724,"text":660},{"id":691,"depth":724,"text":692},{"id":709,"depth":253,"text":710},"Personal Project",[730,732,737],{"sort":437,"role":731,"value":285,"uri":525},"Creator & Developer",{"sort":733,"role":734,"value":735,"uri":736},11,"Documentation","Documentation Site (GitHub Pages)","https:\u002F\u002Fandrewmarconi.github.io\u002Fgenerative-creative-lab",{"sort":738,"role":739,"value":740,"uri":741},12,"Repository","github.com\u002Fandrewmarconi\u002Fgenerative-creative-lab","https:\u002F\u002Fgithub.com\u002Fandrewmarconi\u002Fgenerative-creative-lab","Orchestrating Cultural Adaptation and Visual Innovation in the Algorithmic Era",[],[745],"Global",{"src":747,"alt":587},"\u002Fwork\u002Fdevelopment-generative-creative-lab\u002Fgenerative-creative-lab.jpg","A flexible multi-agent workflow that takes video in, runs it through cultural, language, and localization filters, and returns feedback creative teams act on before shipping across markets.",[451],{},"\u002Fwork\u002Fdevelopment-generative-creative-lab",{"title":587,"description":742},"work\u002Fdevelopment-generative-creative-lab",[755,756,757,582,758,759],"Multi-Agent","LangGraph","Localization","Generative AI","Open Source","AI\u002FMachine Learning","D0vG3hXMINjA7Og-1uBPkuW7pvkrrObCtZhHE_s96mw",{"id":763,"title":764,"body":765,"client":728,"credits":1342,"description":252,"extension":289,"featured":290,"gallery":1352,"geo":1365,"keyart":1366,"lede":1369,"mediaType":1370,"meta":1372,"navigation":301,"path":1373,"seo":1374,"sort":1375,"status":305,"stem":1376,"tags":1377,"vertical":1382,"year":465,"yt_video":318,"__hash__":1383},"casestudies\u002Fwork\u002Fdevelopment-zinecore2.md","ZineCore2 Specification",{"type":8,"value":766,"toc":1321},[767,771,774,778,808,812,815,818,832,835,838,849,853,856,860,863,874,877,881,884,920,923,927,930,934,937,940,969,972,975,978,997,1000,1003,1018,1021,1024,1041,1044,1048,1051,1094,1107,1110,1130,1134,1137,1145,1149,1155,1159,1179,1183,1186,1197,1200,1211,1215,1218,1232,1236,1239,1250,1253,1267,1270,1284,1286],[38,768,770],{"id":769},"a-metadata-ecosystem-for-zine-discovery","A Metadata Ecosystem for Zine Discovery",[16,772,773],{},"ZineCore2 is a metadata ecosystem I designed and implemented to address fragmentation in how zines and DIY publications are cataloged, described, and discovered across institutions and grassroots projects. It shows how I move from domain research and strategy into a spec-first architecture and a working backend in a matter of days using an MVP-first, fail-fast approach.",[38,775,777],{"id":776},"project-highlights","Project highlights",[58,779,780,802,805],{},[61,781,782,783],{},"Deliverables:\n",[58,784,785,788,791,799],{},[61,786,787],{},"ZineCore2 metadata specification and profiles",[61,789,790],{},"Public-facing site for zinesters and catalogers",[61,792,793,794,798],{},"Django\u002FDRF reference API backend (",[795,796,797],"code",{},"ZineCore2\u002Fserver",")",[61,800,801],{},"Onboarding and reset tooling for rapid iteration",[61,803,804],{},"Stack: Django, Django REST Framework, PostgreSQL, Python\u002FTextual tooling",[61,806,807],{},"Timeline to first working API: ~3-4 days",[38,809,811],{"id":810},"trying-to-find-zines-in-a-fragmented-ecosystem","Trying to Find Zines in a fragmented ecosystem",[16,813,814],{},"I came into this space as a zine reader and user: searching for interesting zines and discovering that discoverability is incredibly difficult. Individual, well-regarded zine catalog systems were often offline, unmaintained, or siloed in a way that made them effectively invisible unless you already knew where to look.",[16,816,817],{},"Under the hood, zines live in a mix of systems:",[58,819,820,823,826,829],{},[61,821,822],{},"Traditional MARC-based integrated library systems",[61,824,825],{},"Web platforms such as Omeka and similar tools",[61,827,828],{},"Local spreadsheets or ad-hoc databases",[61,830,831],{},"Bespoke cataloging interfaces tailored to one project",[16,833,834],{},"Each system uses its own fields, formats, and subject vocabularies. Union catalog efforts exist, but the ecosystem lacked a modern, clearly versioned spec and a reference implementation that institutions and zinesters could adopt without reinventing the wheel.",[16,836,837],{},"At the outset, I set three hard constraints for myself:",[58,839,840,843,846],{},[61,841,842],{},"It must be understandable by non-catalogers (zinesters, volunteers, small community archives).",[61,844,845],{},"It must integrate cleanly into existing institutional systems and identifier schemes.",[61,847,848],{},"It must be easy to stand up and iterate on, built from mature, open-source technologies.",[38,850,852],{"id":851},"spec-first-and-ecosystem-oriented","Spec-first and ecosystem-oriented",[16,854,855],{},"Rather than jumping straight into code, I treated this as a standards and information-architecture problem.",[636,857,859],{"id":858},"research-and-framing","Research and framing",[16,861,862],{},"For this, I:",[58,864,865,868,871],{},[61,866,867],{},"Surveyed existing zine metadata work and cataloging practices.",[61,869,870],{},"Looked at the “languages” different systems speak: MARC, BibTeX, various XML formats, JSON exports, local fields and spreadsheets.",[61,872,873],{},"Studied how existing catalogs and union projects were handling (or struggling with) cross-collection discovery.",[16,875,876],{},"This led to a clear insight: the problem is not just “build another catalog,” it's design a lingua franca that multiple systems at different levels of technical proficiency can map to without losing what makes zine collections unique.",[636,878,880],{"id":879},"core-strategic-decisions","Core strategic decisions",[16,882,883],{},"From that, I made three strategic decisions:",[614,885,886,893,914],{},[61,887,888,889,892],{},"Profiles, not a monolith",[890,891],"br",{},"\nInstead of one giant schema, I designed ZineCore2 as a set of discrete metadata profiles. This allows different actors (a single zinester, a community archive, a research library) to adopt only what they need and grow into more complex usage over time.",[61,894,895,896],{},"Separation of concerns: public site vs spec vs implementation",[58,897,898,901,908],{},[61,899,900],{},"A friendly, public-facing site (zinecore.org) aimed at zinesters and catalogers.",[61,902,903,904,907],{},"A dedicated specification repository (",[795,905,906],{},"ZineCore2\u002Fspec",") aimed at developers and system integrators.",[61,909,910,911,913],{},"A reference backend (",[795,912,797],{},") that proves the spec is implementable and useful in practice.",[61,915,916,917,919],{},"Boring, proven stack for the backend",[890,918],{},"\nFor the server, I chose Django + Django REST Framework + PostgreSQL. These tools are easy to spin up, widely understood by library IT teams and web developers, and stable enough for long-running services. That let me focus on modeling and workflows instead of framework plumbing.",[16,921,922],{},"I also defined a “minimum viable ecosystem”: a spec implementable in multiple environments, a canonical backend to validate it, and room for a future Node\u002FVue frontend as a sample client.",[38,924,926],{"id":925},"designing-the-zinecore2-profiles","Designing the ZineCore2 profiles",[16,928,929],{},"The heart of the project is the design of four core metadata profiles plus a set of controlled vocabularies that normalize description without overwhelming catalogers or zinesters.",[636,931,933],{"id":932},"four-core-profiles","Four core profiles",[16,935,936],{},"ZineCore2 - Zines and DIY publications",[16,938,939],{},"Describes the zines themselves.",[58,941,942,966],{},[61,943,944,945,948,949,948,952,948,954,948,957,948,960,948,963],{},"Required fields: ",[795,946,947],{},"title",", ",[795,950,951],{},"creator",[795,953,40],{},[795,955,956],{},"genre",[795,958,959],{},"date",[795,961,962],{},"language",[795,964,965],{},"rights",[61,967,968],{},"Optional fields: rich relationships, identifiers, notes, and other details for institutions that need more expressive records",[16,970,971],{},"Design principle: make it possible to create a valid record in minutes with only a handful of fields, while still supporting deeper description where needed.",[16,973,974],{},"AgentCore2 - Creators, contributors, publishers",[16,976,977],{},"Represents people and entities associated with zines.",[58,979,980,994],{},[61,981,944,982,948,985,948,988,948,991],{},[795,983,984],{},"id",[795,986,987],{},"kind",[795,989,990],{},"display_name",[795,992,993],{},"public",[61,995,996],{},"Supports multiple roles (creator, editor, publisher, etc.) and mappings to external identifiers when necessary.",[16,998,999],{},"HoldingCore2 - Specific copies at repositories",[16,1001,1002],{},"Models individual copies and where they live.",[58,1004,1005,1015],{},[61,1006,944,1007,948,1009,948,1012],{},[795,1008,984],{},[795,1010,1011],{},"repository_id",[795,1013,1014],{},"zine_id",[61,1016,1017],{},"Enables union-catalog style queries like “who holds this zine and where?” without exposing internal circulation details.",[16,1019,1020],{},"RepoCore2 - Libraries, archives, distros",[16,1022,1023],{},"Describes the organizations and collectives that steward zines.",[58,1025,1026,1038],{},[61,1027,944,1028,948,1030,948,1033,948,1035],{},[795,1029,984],{},[795,1031,1032],{},"name",[795,1034,987],{},[795,1036,1037],{},"country",[61,1039,1040],{},"Optional fields: mappings to institutional identifiers such as MARC organization codes, ISIL, or ROR IDs.",[16,1042,1043],{},"This allows serious library systems to integrate ZineCore2 with their existing authority files and infrastructure (MARC records and other standards), while keeping the basic profile simple enough for small distros and community archives.",[636,1045,1047],{"id":1046},"controlled-vocabularies","Controlled vocabularies",[16,1049,1050],{},"To reduce chaos without turning the spec into a barrier, I defined controlled vocabularies for:",[58,1052,1053,1056,1059,1068,1074,1083],{},[61,1054,1055],{},"Subjects and genres",[61,1057,1058],{},"Rights statements",[61,1060,1061,1062,948,1065],{},"Agent-related values: ",[795,1063,1064],{},"agent_kinds",[795,1066,1067],{},"agent_roles",[61,1069,1070,1071],{},"Repository-related values: ",[795,1072,1073],{},"repo_kinds",[61,1075,1076,1077,948,1080],{},"Holding statuses: ",[795,1078,1079],{},"holding_access_statuses",[795,1081,1082],{},"holding_distro_statuses",[61,1084,1085,1086,1089,1090,1093],{},"Geographic ",[795,1087,1088],{},"locations"," (using GeoNames - countries and admin1 as the canonical source) and ",[795,1091,1092],{},"languages"," (using ISO 639-3)",[16,1095,1096,1097,1100,1101,1106],{},"The vocabularies were created based on existing frameworks, specifications and standards. For instance, the subjects and genres are based the already distilled ",[19,1098,1099],{},"Anchor Archive Subject Thesaurus",", which is a ",[30,1102,1105],{"href":1103,"rel":1104},"https:\u002F\u002Floc.gov\u002Fstandards\u002Fsourcelist\u002Fsubject.html",[34],"Library of Congress indexed source vocabulary for subjects"," in specific 'zine' topic categories.",[16,1108,1109],{},"A core design tradeoff was limiting the required fields and keeping vocabularies opinionated but not exhaustive. Many fields are optional: irrelevant to some projects, critical to others. Mapping a repository to its MARC, ISIL, or ROR identifiers, for example, is essential for some institutions and noise for others. The profiles are designed so both use cases feel first-class.",[16,1111,1112,1113,119,1118,1123,1124,1129],{},"Future explorations may be to expand coverage to include this and other sources similar to how ",[30,1114,1117],{"href":1115,"rel":1116},"https:\u002F\u002Fviaf.org\u002Fen",[34],"The Virtual International Authoritary File (VIAF)",[30,1119,1122],{"href":1120,"rel":1121},"https:\u002F\u002Foclc.org",[34],"Online Computer Library Center (OCLC)"," treats mapping disparate systems of metadata so that if one repository uses the Anchor Archive Subject Thesaurus, and another uses the ",[30,1125,1128],{"href":1126,"rel":1127},"https:\u002F\u002Feur-lex.europa.eu\u002Fbrowse\u002Feurovoc.html",[34],"EuroVoc"," thesaurus, we provide mappings to link similar concepts to aid in discovery.",[636,1131,1133],{"id":1132},"audience-aware-documentation","Audience-aware documentation",[16,1135,1136],{},"I split the documentation by audience:",[58,1138,1139,1142],{},[61,1140,1141],{},"zinecore.org is written in friendly language with just enough depth for catalogers, prioritizing clarity over exhaustiveness.",[61,1143,1144],{},"ZineCore2\u002Fspec is aimed at developers, with explicit profile definitions and a structure that mirrors how the backend actually behaves.",[38,1146,1148],{"id":1147},"implementation-a-working-backend-in-3-4-days","Implementation: a working backend in 3-4 days",[16,1150,1151,1152,1154],{},"With the spec solid enough to test, I moved into implementation, treating ",[795,1153,797],{}," as both a reference backend and a way to pressure-test the design.",[636,1156,1158],{"id":1157},"architecture-and-tech-choices","Architecture and tech choices",[58,1160,1161,1167,1173],{},[61,1162,1163,1164,1166],{},"Django + Django REST Framework + PostgreSQL",[890,1165],{},"\nI chose this stack because it's easy to spin up, mature, and widely supported. DRF is effectively the standard for building APIs in Django, and it provides solid serialization, validation, and authentication primitives. Leaning on those allowed me to focus on data modeling and workflows.",[61,1168,1169,1170,1172],{},"Modular, loosely coupled design",[890,1171],{},"\nI structured the project so each core profile maps to its own cohesive module (zines, agents, holdings, repositories). The components are loosely coupled, making it easier to scale or re-host specific parts in the future (for example, a cloud-based canonical repository service).",[61,1174,1175,1176,1178],{},"Spec-aligned schema",[890,1177],{},"\nModels, serializers, and API endpoints are tightly aligned with the spec. This keeps documentation and implementation synchronized and makes the server a natural validator for third-party data.",[636,1180,1182],{"id":1181},"delivery-approach-and-timeline","Delivery approach and timeline",[16,1184,1185],{},"I acted as architect, project manager, and technical lead, and used coding agents as implementation helpers where it made sense. My responsibilities included:",[58,1187,1188,1191,1194],{},[61,1189,1190],{},"Decomposing the system into well-scoped features aligned with the profiles.",[61,1192,1193],{},"Defining acceptance criteria, data structures, and validation rules.",[61,1195,1196],{},"Making architecture, modeling, and integration decisions.",[16,1198,1199],{},"I used an MVP-first, fail-fast strategy:",[58,1201,1202,1205,1208],{},[61,1203,1204],{},"Initial target: a working API that can create, retrieve, and list Zines, Agents, Holdings, and Repositories according to the profiles.",[61,1206,1207],{},"Time to first working, demo-able API: about 3-4 days.",[61,1209,1210],{},"Iteration: I used the running API to quickly surface missing fields, awkward relationships, or profile ambiguities, then looped those findings back into the spec.",[636,1212,1214],{"id":1213},"tooling-and-developer-experience","Tooling and developer experience",[16,1216,1217],{},"To make experimentation and adoption smoother, I built supporting tools around the server:",[58,1219,1220,1226],{},[61,1221,1222,1223,1225],{},"Onboarding\u002Freset tool (Python + Textual)",[890,1224],{},"\nA terminal-based tool that automates resetting and configuring the reference implementation. This makes it easy to blow away and rebuild the environment when testing new features, data structures, or migrations.",[61,1227,1228,1229,1231],{},"Import and mapping workflows",[890,1230],{},"\nI began mapping agents and repositories from different sources into AgentCore2 and RepoCore2. These mappings serve as real-world tests of both the spec and the backend, helping confirm that the profiles accommodate data from multiple “languages” and systems.",[38,1233,1235],{"id":1234},"impact-and-next-steps","Impact and next steps",[16,1237,1238],{},"ZineCore2 is designed as an ecosystem, not just an app:",[58,1240,1241,1244,1247],{},[61,1242,1243],{},"A specification that functions as a common metadata language across very different systems and technical capacities.",[61,1245,1246],{},"A reference backend that proves the spec is implementable and useful, and that can be deployed as a standalone service by institutions or grassroots projects.",[61,1248,1249],{},"Tooling and architecture that support rapid iteration and future scaling, including a clear path to cloud-hosted or union-catalog scenarios.",[16,1251,1252],{},"In the near term, my focus is on:",[58,1254,1255,1261,1264],{},[61,1256,1257,1258,1260],{},"Open-sourcing the ",[795,1259,797],{}," backend.",[61,1262,1263],{},"Encouraging discussion and collaboration around evolving the standard.",[61,1265,1266],{},"Exploring a Node + Vue frontend reference implementation to demonstrate how the API can power discovery and staff workflows.",[16,1268,1269],{},"For me professionally, ZineCore2 is a proof-of-concept of how I work:",[58,1271,1272,1275,1278,1281],{},[61,1273,1274],{},"Start from real user pain (in this case, my own difficulty discovering zines).",[61,1276,1277],{},"Do the strategic and IA work to define a realistic standard that respects both institutional and grassroots needs.",[61,1279,1280],{},"Design an ecosystem (spec, site, backend, tooling) rather than a single artifact.",[61,1282,1283],{},"Execute quickly with modern tools, MVP-first principles, and an eye toward long-term maintainability.",[38,1285,415],{"id":414},[58,1287,1288,1296,1305,1313],{},[61,1289,1290,1291],{},"Website: ",[30,1292,1295],{"href":1293,"rel":1294},"https:\u002F\u002Fzinecore.org\u002F",[34],"https:\u002F\u002FZineCore.org",[61,1297,1298,1299,1304],{},"Repository: ",[30,1300,1303],{"href":1301,"rel":1302},"https:\u002F\u002Fgithub.com\u002Fzinecore2\u002Fspec",[34],"zinecore2\u002Fspec"," - Dublin Core application profiles, JSON Schemas, JSON-LD contexts, and controlled vocabularies for describing zines, creators, holdings, and repositories.",[61,1306,1298,1307,1312],{},[30,1308,1311],{"href":1309,"rel":1310},"https:\u002F\u002Fgithub.com\u002Fzinecore2\u002Fserver",[34],"zinecore2\u002Fserver"," - Django REST API backend implementing the ZineCore2 metadata profiles with PostgreSQL",[61,1314,1298,1315,1320],{},[30,1316,1319],{"href":1317,"rel":1318},"https:\u002F\u002Fgithub.com\u002Fzinecore2\u002Fwebsite",[34],"zinecore2\u002Fwebsite"," - Documentation website for the ZineCore2 metadata specification, built with Nuxt 4 + Docus, hosted at zinecore.org",{"title":252,"searchDepth":253,"depth":253,"links":1322},[1323,1324,1325,1326,1330,1335,1340,1341],{"id":769,"depth":253,"text":770},{"id":776,"depth":253,"text":777},{"id":810,"depth":253,"text":811},{"id":851,"depth":253,"text":852,"children":1327},[1328,1329],{"id":858,"depth":724,"text":859},{"id":879,"depth":724,"text":880},{"id":925,"depth":253,"text":926,"children":1331},[1332,1333,1334],{"id":932,"depth":724,"text":933},{"id":1046,"depth":724,"text":1047},{"id":1132,"depth":724,"text":1133},{"id":1147,"depth":253,"text":1148,"children":1336},[1337,1338,1339],{"id":1157,"depth":724,"text":1158},{"id":1181,"depth":724,"text":1182},{"id":1213,"depth":724,"text":1214},{"id":1234,"depth":253,"text":1235},{"id":414,"depth":253,"text":415},[1343,1345,1349,1351],{"sort":437,"role":1344,"value":285},"Technical Lead & Strategist",{"sort":1346,"role":1347,"value":1348},100,"Inspiration & Reference","xZINECOREx & ZineCat",{"sort":1346,"role":1347,"value":1350},"Library of Congress (LOC) MARC Standards",{"sort":1346,"role":1347,"value":1099},[1353,1356,1359,1362],{"src":1354,"alt":1355},"\u002Fwork\u002Fdevelopment-zinecore2\u002Ffour-profiles.jpg","Four Core Schema Profiles",{"src":1357,"alt":1358},"\u002Fwork\u002Fdevelopment-zinecore2\u002Fonboarding-tui.jpg","Onboarding TUI built with Python & Textual",{"src":1360,"alt":1361},"\u002Fwork\u002Fdevelopment-zinecore2\u002Freference-server.jpg","Reference Server Detail View",{"src":1363,"alt":1364},"\u002Fwork\u002Fdevelopment-zinecore2\u002Fcontrolled-vocabulary.jpg","Controlled Vocabularies",[745],{"src":1367,"alt":1368},"\u002Fwork\u002Fdevelopment-zinecore2\u002Fkeyart.jpg","ZineCore2: A refined and friendly spec for cataloging zines","A metadata specification and reference backend for cataloging zines, their creators, holdings, and repositories. A shared lingua franca for a fragmented DIY archive ecosystem.",[1371,451],"Specification",{},"\u002Fwork\u002Fdevelopment-zinecore2",{"title":764,"description":252},50,"work\u002Fdevelopment-zinecore2",[1378,1379,1380,1381,759],"Metadata","Cataloging","Open Standard","Django","Creative Industry","aYdquo23ZmOgI3mgaIRNaeFAXEM3qpSsZo2SMI0q7i0",{"id":1385,"title":1386,"body":1387,"client":118,"credits":1444,"description":252,"extension":289,"featured":301,"gallery":1452,"geo":1453,"keyart":1454,"lede":1456,"mediaType":1457,"meta":1459,"navigation":301,"path":1460,"seo":1461,"sort":1462,"status":305,"stem":1463,"tags":1464,"vertical":1469,"year":1470,"yt_video":318,"__hash__":1471},"casestudies\u002Fwork\u002Ffive59-labs-the-other-what-podcast.md","\"The Other What\" Podcast",{"type":8,"value":1388,"toc":1438},[1389,1393,1396,1399,1403,1406,1409,1413,1416,1419,1422,1426,1429,1432,1435],[38,1390,1392],{"id":1391},"how-it-started","How it started",[16,1394,1395],{},"Sharon Goh and I have been friends for almost twenty years. When she moved back to Atlanta after a long chapter elsewhere, she met Désirée Jamerson, and the two of them started having the kind of long, layered conversations that friends keep telling you you should record. Eventually one of those friends said it out loud: you should do a podcast. Sharon messaged me asking how. The answer turned into an entire project.",[16,1397,1398],{},"I saw two things at once. One was a co-host pairing nobody was really making podcasts about. The other was a chance to do real media production for two voices that worked together and a perspective the medium wasn't serving.",[38,1400,1402],{"id":1401},"the-hosts","The hosts",[16,1404,1405],{},"Sharon and Désirée come from different southern backgrounds, which is part of what makes the show work. Désirée brings gravitas. Sharon brings warmth. Together they create a common thread that holds episodes ranging across mid-life, divorce, identity, race, queerness, and what it means to live as multiple \"others\" in a world that pretends it has one default audience.",[16,1407,1408],{},"The format default in podcast culture skews white, urban, and northeastern. The Other What sits somewhere else: two queer women of color in Atlanta talking about a southern, mid-life, intersectional experience that gets very little oxygen in the medium.",[38,1410,1412],{"id":1411},"what-i-do","What I do",[16,1414,1415],{},"All-in-one passion project. I run the production calendar, engineer the recording sessions, edit the episodes, and handle packaging and distribution. Working with the hosts, I help develop season concepts and arc; they handle their own guest relationships.",[16,1417,1418],{},"We started in audio and moved to video, which materially changed the room. Episodes run 45 to 60 minutes in two-host conversational format, with the camera adding the layer of presence that audio alone couldn't.",[16,1420,1421],{},"The custom site (Nuxt + Directus) gives the show a richer marketing platform than a default podcast-host page. It carries the episode archive, gathers community, and runs the merch that supports production.",[38,1423,1425],{"id":1424},"what-it-did","What it did",[16,1427,1428],{},"The most useful piece of feedback we ever got was unintentional.",[16,1430,1431],{},"We were reviewing listener numbers when one of the hosts paused mid-scroll. \"Here's something funny.\" A male coworker from her day job had started listening. Younger, straight, different background, outside the audience we'd designed for. On paper, he wasn't supposed to be there. But he had listened to an episode, something rooted in lived experience we hadn't polished over, and he came back. Then he came back again. When he finally told her, he explained why: he'd been curious about her life, started one episode, and got pulled in by stories from a perspective he had never encountered.",[16,1433,1434],{},"It wasn't trying to win him over. It was just real. He trusted it because he couldn't spot the performance.",[16,1436,1437],{},"That, more than the platform totals across Spotify, Apple Podcasts, YouTube, Pandora, Amazon Music, and Audible, is the proof I look at. Audiences underserved by the default podcast economy can hear the difference between something authentic and something manufactured. They sought it out. They stayed. The unexpected listeners came along anyway.",{"title":252,"searchDepth":253,"depth":253,"links":1439},[1440,1441,1442,1443],{"id":1391,"depth":253,"text":1392},{"id":1401,"depth":253,"text":1402},{"id":1411,"depth":253,"text":1412},{"id":1424,"depth":253,"text":1425},[1445,1446,1450],{"sort":264,"role":274,"value":118,"uri":116},{"sort":1447,"role":1448,"value":1449},14,"Co-Hosts","Désirée Jamerson & Sharon Goh",{"sort":269,"role":1451,"value":285},"Producer",[],[745],{"src":1455,"alt":1386},"\u002Fwork\u002Ffive59-labs-the-other-what-podcast\u002Fthe-other-what-podcast.jpg","A podcast where two Atlanta-based queer women of color navigate mid-life, divorce, community, and the experience of living as multiple \"others\" in a heteronormative world.",[89,1458],"Website",{},"\u002Fwork\u002Ffive59-labs-the-other-what-podcast",{"title":1386,"description":252},60,"work\u002Ffive59-labs-the-other-what-podcast",[1465,1466,1467,1468],"LGBTQ+","Atlanta","Identity","Mid-Life","Media","2023-Present","E3PZA5QMs3rDgfAjCFeyJ9iIAj6fBqLdoXrfjNO2Bqo",{"id":1473,"title":1474,"body":1475,"client":118,"credits":1591,"description":252,"extension":289,"featured":290,"gallery":1614,"geo":1615,"keyart":1616,"lede":1619,"mediaType":1620,"meta":1621,"navigation":301,"path":1622,"seo":1623,"sort":1624,"status":305,"stem":1625,"tags":1626,"vertical":1469,"year":1627,"yt_video":318,"__hash__":1628},"casestudies\u002Fwork\u002Ffive59-labs-almost-famous-podcast.md","\"Almost Famous\" Podcast",{"type":8,"value":1476,"toc":1585},[1477,1479,1485,1489,1492,1495,1498,1502,1505,1568,1571,1575,1582],[38,1478,14],{"id":13},[16,1480,1481,1484],{},[19,1482,1483],{},"Almost Famous: Lost Heroes & Forgotten Legends"," is a documentary podcast about brilliant people whose contributions were overlooked, suppressed, or quietly lost to history. Rosalind Franklin's work on DNA. Klara von Neumann's pioneering computer programming. Lucy Parsons. Bass Reeves. The enslaved inventors of the cotton gin. Harriet Burns, Disney's first female Imagineer. The show focuses on the figures who almost changed the world, and the forces (gender bias, class oppression, political agendas, industrial espionage) that systematically erased them.",[38,1486,1488],{"id":1487},"why-i-made-it","Why I made it",[16,1490,1491],{},"I run a small media-production lab. I hate the sound of my own recorded voice. There's no budget for voice talent or freelance editors. A traditional production setup for a long-form documentary podcast was out of reach.",[16,1493,1494],{},"That's the brief in the form it actually came in. Not \"let's experiment with AI\" but \"here's something I want to make, and the only honest path to making it runs through tools that didn't exist a few years ago.\"",[16,1496,1497],{},"So Almost Famous became, by necessity, a working test of a particular division of labor: human judgment at the checkpoints, AI everywhere else.",[38,1499,1501],{"id":1500},"the-pipeline","The pipeline",[16,1503,1504],{},"Nine steps, three human checkpoints, the rest automated. Each episode is tracked in a Google Sheets workbook from concept to publish.",[614,1506,1507,1513,1523,1529,1535,1543,1549,1554,1562],{},[61,1508,1509,1512],{},[19,1510,1511],{},"Concept generation"," via Perplexity AI.",[61,1514,1515,1518,1519,1522],{},[19,1516,1517],{},"Concept selection."," ",[19,1520,1521],{},"HITL (Human in the Loop)."," The editorial mission lives here. The whole show fails if the wrong figures get picked, so I review every candidate by hand.",[61,1524,1525,1528],{},[19,1526,1527],{},"Knowledge corpus building"," via NotebookLM and Perplexity.",[61,1530,1531,1534],{},[19,1532,1533],{},"Script development"," via NotebookLM and Gemini.",[61,1536,1537,1518,1540,1542],{},[19,1538,1539],{},"Fact-check and sensitivity review.",[19,1541,1521],{}," Perplexity flags claims and sources. I read every script for accuracy, sensitivity, and bias before audio generation runs. Minimum three academic sources per claim.",[61,1544,1545,1548],{},[19,1546,1547],{},"Audio generation"," via ElevenLabs TTS, with me assembling the final mix in DaVinci Resolve.",[61,1550,1551],{},[19,1552,1553],{},"Show notes generation.",[61,1555,1556,1518,1559,1561],{},[19,1557,1558],{},"Editorial review.",[19,1560,1521],{}," Final pass before publish.",[61,1563,1564,1567],{},[19,1565,1566],{},"Publishing"," to Acast, which fans out to Spotify, Apple Podcasts, YouTube, iHeart Radio, Deezer, and Amazon Music.",[16,1569,1570],{},"Three human checkpoints. The rest is plumbing.",[38,1572,1574],{"id":1573},"what-this-taught-me","What this taught me",[16,1576,1577,1578,1581],{},"This pattern (human judgment at the checkpoints, AI everywhere else) isn't only a strategy for established creators protecting a premium. It's also an equity story. ",[19,1579,1580],{},"Almost Famous"," wouldn't exist without TTS. A single person with no budget can now produce a long-form documentary podcast series that used to require a production team. AI didn't replace a human team here. It made production possible where nothing existed before.",[16,1583,1584],{},"The harder skill is knowing when AI makes sense and when it doesn't. Use AI ruthlessly where it earns its keep. Stop using it the moment human judgment matters more than throughput. Concept selection, fact-check, editorial review: those don't get automated. Everything else does. The challenge is the judgment call about which is which, and that judgment is the practitioner's job, not the model's.",{"title":252,"searchDepth":253,"depth":253,"links":1586},[1587,1588,1589,1590],{"id":13,"depth":253,"text":14},{"id":1487,"depth":253,"text":1488},{"id":1500,"depth":253,"text":1501},{"id":1573,"depth":253,"text":1574},[1592,1593,1597,1600,1604,1607,1610],{"sort":437,"role":284,"value":285},{"sort":264,"role":1594,"value":1595,"uri":1596},"YouTube Channel","@almostfamousdocs","https:\u002F\u002Fyoutube.com\u002F@almostfamousdocs",{"sort":733,"role":1458,"value":1598,"uri":1599},"On Acast","https:\u002F\u002Fshows.acast.com\u002Falmost-famous-lost-heros-forgotten-legends",{"sort":738,"role":1601,"value":1602,"uri":1603},"Listen On","Spotify","https:\u002F\u002Fopen.spotify.com\u002Fshow\u002F51xHZTcXpRNRKpEgf8a0SW",{"sort":304,"role":1601,"value":1605,"uri":1606},"Apple Podcasts","https:\u002F\u002Fpodcasts.apple.com\u002Fus\u002Fpodcast\u002Falmost-famous-lost-heros-forgotten-legends\u002Fid1834232360",{"sort":1447,"role":1601,"value":1608,"uri":1609},"iHeart Radio","https:\u002F\u002Fwww.iheart.com\u002Fpodcast\u002F269-almost-famous-lost-heros-f-290098886\u002F",{"sort":1611,"role":1601,"value":1612,"uri":1613},15,"Deezer","https:\u002F\u002Fwww.deezer.com\u002Fus\u002Fshow\u002F1002125281",[],[293],{"src":1617,"alt":1618},"\u002Fwork\u002Ffive59-labs-almost-famous-podcast\u002Fkeyart.jpg","Almost Famous Podcast","An experiment in AI-supported research and production: a long-form documentary podcast recovering the scientists, inventors, and pioneers history quietly forgot.",[89],{},"\u002Fwork\u002Ffive59-labs-almost-famous-podcast",{"title":1474,"description":252},70,"work\u002Ffive59-labs-almost-famous-podcast",[89,313,758],2025,"NPWWNA8JnHO_UD1HY7AwV-WxnNpqI3kpEQ4TN3EA984",{"id":1630,"title":1631,"body":1632,"client":1642,"credits":1643,"description":252,"extension":289,"featured":290,"gallery":1650,"geo":1659,"keyart":1660,"lede":1662,"mediaType":1663,"meta":1665,"navigation":301,"path":1666,"seo":1667,"sort":1668,"status":305,"stem":1669,"tags":1670,"vertical":582,"year":583,"yt_video":318,"__hash__":1673},"casestudies\u002Fwork\u002Fbbdo-worldwide-incitework-planner.md","BBDO InciteWork",{"type":8,"value":1633,"toc":1639},[1634,1636],[38,1635,328],{"id":327},[16,1637,1638],{},"BBDO InciteWork was a proprietary account planning tool developed in-house at BBDO Worldwide in collaboration with BBDO Canada. During the design process, we oversaw design\u002Fdevelopment, including needs assessment, UX, and stakeholder review.",{"title":252,"searchDepth":253,"depth":253,"links":1640},[1641],{"id":327,"depth":253,"text":328},"BBDO Worldwide",[1644,1646],{"sort":437,"role":1645,"value":1642},"Agency",{"sort":1346,"role":1647,"value":1648,"uri":1649},"Press","StrategyOnline.ca - AOY Gold BBSO Maps Out a Win","https:\u002F\u002Fstrategyonline.ca\u002F2011\u002F11\u002F10\u002Faoy-gold-bbdo-maps-out-a-win\u002F#:~:text=Putting%20the%20right%20content%20in,%2C%20in%20this%20case%2C%20master.",[1651,1653,1655,1657],{"src":1652},"\u002Fwork\u002Fbbdo-worldwide-incitework-planner\u002Fbbdo-worldwide-incitework-planner-01.jpg",{"src":1654},"\u002Fwork\u002Fbbdo-worldwide-incitework-planner\u002Fbbdo-worldwide-incitework-planner-02.jpg",{"src":1656},"\u002Fwork\u002Fbbdo-worldwide-incitework-planner\u002Fbbdo-worldwide-incitework-planner-03.jpg",{"src":1658},"\u002Fwork\u002Fbbdo-worldwide-incitework-planner\u002Fbbdo-worldwide-incitework-planner-04.jpg",[745],{"src":1661,"alt":1631},"\u002Fwork\u002Fbbdo-worldwide-incitework-planner\u002Fbbdo-incitework.jpg","An in-house digital account-planning platform built for BBDO Worldwide and BBDO Canada, putting the right brief in front of the right strategist at agency-wide scale.",[1664],"Enterprise Application",{},"\u002Fwork\u002Fbbdo-worldwide-incitework-planner",{"title":1631,"description":252},90,"work\u002Fbbdo-worldwide-incitework-planner",[1671,1672],"UX","Design Management","LEeP6hzRJujCCZFww2-J0cQ-HbtrQ8SY5LEfLyFwUI8",{"id":1675,"title":1676,"body":1677,"client":1725,"credits":1726,"description":252,"extension":289,"featured":290,"gallery":1731,"geo":1738,"keyart":1739,"lede":1741,"mediaType":1742,"meta":1743,"navigation":301,"path":1744,"seo":1745,"sort":1346,"status":305,"stem":1746,"tags":1747,"vertical":582,"year":1748,"yt_video":318,"__hash__":1749},"casestudies\u002Fwork\u002Fcingular-att-digital-ad-builder.md","Digital Ad Builder",{"type":8,"value":1678,"toc":1721},[1679,1683,1686,1697,1700,1704,1718],[38,1680,1682],{"id":1681},"solution-ux-leadership-and-print-innovation","Solution: UX leadership and print innovation",[16,1684,1685],{},"As Manager, Digital Design & Development, I led UX for the marketing automation program. AdWorks 1.0 was a print automation tool that let in-house ad teams, local marketing teams, and third-party dealers:",[58,1687,1688,1691,1694],{},[61,1689,1690],{},"Build their own ads from corporate pre-approved assets for seasonal campaigns.",[61,1692,1693],{},"Manage local store listings for inclusion in print advertising.",[61,1695,1696],{},"Deliver camera-ready artwork via FastChannel directly through ad networks.",[16,1698,1699],{},"One quiet technical win: the system profiled every newspaper outlet and adjusted ink levels by press-type, so color held up across the network.",[38,1701,1703],{"id":1702},"impact","Impact",[58,1705,1706,1712],{},[61,1707,1708,1711],{},[19,1709,1710],{},"Production",": AdWorks 1.0 grew the client's print output from roughly 11,000 ads a year to over 20,000.",[61,1713,1714,1717],{},[19,1715,1716],{},"Efficiency",": That near-doubling happened with no added headcount.",[16,1719,1720],{},"The program carried the local advertising load for Cingular through a period of fast growth.",{"title":252,"searchDepth":253,"depth":253,"links":1722},[1723,1724],{"id":1681,"depth":253,"text":1682},{"id":1702,"depth":253,"text":1703},"Cingular (AT&T)",[1727,1729],{"sort":437,"role":440,"value":1728},"Cingular Wireless (AT&T Mobile)",{"sort":253,"role":1645,"value":1730},"BBDO Atlanta",[1732,1734,1736],{"src":1733},"\u002Fwork\u002Fcingular-att-digital-ad-builder\u002Fcingular-att-digital-ad-builder-01.jpg",{"src":1735},"\u002Fwork\u002Fcingular-att-digital-ad-builder\u002Fcingular-att-digital-ad-builder-02.jpg",{"src":1737},"\u002Fwork\u002Fcingular-att-digital-ad-builder\u002Fcingular-att-digital-ad-builder-03.jpg",[293],{"src":1740,"alt":1676},"\u002Fwork\u002Fcingular-att-digital-ad-builder\u002Fkeyart.png","A print-automation platform that let Cingular's local marketing teams produce more campaigns at consistent national quality, without growing the team behind them.",[1664],{},"\u002Fwork\u002Fcingular-att-digital-ad-builder",{"title":1676,"description":252},"work\u002Fcingular-att-digital-ad-builder",[1671,1672],2005,"wNsR7ijwP7uJcVYTfUqqcJIOUORovTCuDFv0KXPQcFw",{"id":1751,"title":1752,"body":1753,"client":1771,"credits":1772,"description":252,"extension":289,"featured":290,"gallery":1777,"geo":1800,"keyart":1801,"lede":1802,"mediaType":1803,"meta":1805,"navigation":301,"path":1806,"seo":1807,"sort":1808,"status":305,"stem":1809,"tags":1810,"vertical":1813,"year":1814,"yt_video":318,"__hash__":1815},"casestudies\u002Fwork\u002Fsuez-north-america-expo-booth-design.md","Expo Booth Design & Management",{"type":8,"value":1754,"toc":1767},[1755,1757,1760,1764],[38,1756,328],{"id":327},[16,1758,1759],{},"SUEZ Digital Solutions North America was looking to create a welcoming and flexible space to meet with current customers as well as meet new clients. They needed a booth that was flexible, could be reconfigured for different floorspace (10x10, 10x20, 20x20, etc.), and allow for multiple conversations to happen comfortably at the same time.",[38,1761,1763],{"id":1762},"solution","Solution",[16,1765,1766],{},"We designed a flexible, modular booth concept consisting of two large and one small pop-up components using SEG fabric, a small residential dining suite and a selection of low-profile LED displays. The booth has been used in a 10x10 configuration, a 10x20 configuration, as well as a 20x20.",{"title":252,"searchDepth":253,"depth":253,"links":1768},[1769,1770],{"id":327,"depth":253,"text":328},{"id":1762,"depth":253,"text":1763},"SUEZ North America",[1773,1775],{"sort":437,"role":1774,"value":285},"Creative Director",{"sort":253,"role":274,"value":1776},"Eagle Exhibits (Columbus, Ohio)",[1778,1780,1782,1784,1786,1788,1790,1792,1794,1796,1798],{"src":1779},"\u002Fwork\u002Fsuez-north-america-expo-booth-design\u002Fexpo-booth-design-management.jpg",{"src":1781},"\u002Fwork\u002Fsuez-north-america-expo-booth-design\u002Fsuez-north-america-expo-booth-design-02.jpg",{"src":1783},"\u002Fwork\u002Fsuez-north-america-expo-booth-design\u002Fsuez-north-america-expo-booth-design-03.jpg",{"src":1785},"\u002Fwork\u002Fsuez-north-america-expo-booth-design\u002Fsuez-north-america-expo-booth-design-04.jpg",{"src":1787},"\u002Fwork\u002Fsuez-north-america-expo-booth-design\u002Fsuez-north-america-expo-booth-design-05.jpg",{"src":1789},"\u002Fwork\u002Fsuez-north-america-expo-booth-design\u002Fsuez-north-america-expo-booth-design-06.jpg",{"src":1791},"\u002Fwork\u002Fsuez-north-america-expo-booth-design\u002Fsuez-north-america-expo-booth-design-07.jpg",{"src":1793},"\u002Fwork\u002Fsuez-north-america-expo-booth-design\u002Fsuez-north-america-expo-booth-design-08.jpg",{"src":1795},"\u002Fwork\u002Fsuez-north-america-expo-booth-design\u002Fsuez-north-america-expo-booth-design-09.jpg",{"src":1797},"\u002Fwork\u002Fsuez-north-america-expo-booth-design\u002Fsuez-north-america-expo-booth-design-10.jpg",{"src":1799},"\u002Fwork\u002Fsuez-north-america-expo-booth-design\u002Fsuez-north-america-expo-booth-design-11.jpg",[293],{"src":1779,"alt":1752},"A flexible, modular trade-show booth for SUEZ Digital Solutions, with SEG-fabric pop-ups, residential-style seating, and LED that reconfigure from 10x10 up to 20x20.",[1804],"Booth Design",{},"\u002Fwork\u002Fsuez-north-america-expo-booth-design",{"title":1752,"description":252},110,"work\u002Fsuez-north-america-expo-booth-design",[1811,1812],"Expo","Experiential","Events","2023-2025","y8t3-pFTHaTRor7B14wGCnOp7vGbgNKQXnz-2eSmKro",{"id":1817,"title":1818,"body":1819,"client":1880,"credits":1881,"description":252,"extension":289,"featured":301,"gallery":1897,"geo":1930,"keyart":1931,"lede":1933,"mediaType":1934,"meta":1936,"navigation":301,"path":1937,"seo":1938,"sort":1939,"status":305,"stem":1940,"tags":1941,"vertical":1813,"year":1945,"yt_video":318,"__hash__":1946},"casestudies\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event.md","WaterWoman Project Launch Event",{"type":8,"value":1820,"toc":1873},[1821,1825,1828,1831,1834,1838,1845,1851,1855,1858,1862,1865,1868,1870],[38,1822,1824],{"id":1823},"the-brief","The brief",[16,1826,1827],{},"WaterRising Institute was launching the WaterWoman Project, a global call-to-action on the gender gap in water management. The director wanted a high-profile splash to announce it, anchored at Stockholm Water Week, in front of the people who could move the work forward: UN Water, UN Women, the World Bank, Xylem leadership, and the working network of women across the global water sector who would carry the program after we all went home.",[16,1829,1830],{},"The plan stayed loose nearly all the way through. The guest list shifted in the final week. Pre-production happened from the US for an event seven time zones away. And the venue changed at the last minute.",[16,1832,1833],{},"I co-produced the night alongside a WaterRising colleague, working both ends of the planning timeline.",[38,1835,1837],{"id":1836},"the-choices","The choices",[16,1839,1840,1844],{},[1841,1842,1843],"strong",{},"Fotografiska, on the bank of the Söderström."," Stockholm during Water Week is a city where every venue is double-booked and every senior leader is over-scheduled. We needed somewhere off the main Water Week campus, a deliberate break from the conference grind, that could absorb 300 guests and didn't look like a hotel ballroom. Fotografiska delivered three things at once: a serious gallery setting, a wall of windows opening onto the water, and a price we could actually afford.",[16,1846,1847,1850],{},[1841,1848,1849],{},"Sopköket for the food."," Sopköket is a Stockholm caterer that rescues surplus food, employs people working back into the labor force, and donates meals. For a sustainability-rooted launch about women in water, putting them on the program wasn't a hard call. Optics and budget aligned.",[38,1852,1854],{"id":1853},"the-night","The night",[16,1856,1857],{},"Cocktails, presentation, buffet dinner. About 300 people. The presentation was anchored by three voices: the WaterRising director, the Xylem CEO, and a representative from the World Bank, speaking from the institutional, private-sector, and multilateral-finance corners of the water world. The call to action was the WaterWoman Project itself.",[38,1859,1861],{"id":1860},"the-hard-part","The hard part",[16,1863,1864],{},"Three things at once. A sponsor and stakeholder stack that included multilateral institutions, public companies, and a UN convening body, none of whom move quickly. Pre-production running from the US, with the team only on the ground in Stockholm in the final stretch. And a last-minute venue change that required chartering buses to move large numbers of attendees smoothly to the new location, on short notice, in a city full of conference traffic.",[16,1866,1867],{},"Show me a producer who has never had to suddenly book buses in a foreign city and I'll show you a producer who has never run an international launch.",[38,1869,1425],{"id":1424},[16,1871,1872],{},"The honest answer: it raised the org's visibility internationally and put the WaterWoman Project on the global water sector's radar in a single night. And, possibly more important than any of that, it created a few hours where women working in water across the world, who normally only see each other inside formal meetings and breakout sessions, could actually take a breath, eat, and talk to each other. Conferences don't usually leave room for that. We made room.",{"title":252,"searchDepth":253,"depth":253,"links":1874},[1875,1876,1877,1878,1879],{"id":1823,"depth":253,"text":1824},{"id":1836,"depth":253,"text":1837},{"id":1853,"depth":253,"text":1854},{"id":1860,"depth":253,"text":1861},{"id":1424,"depth":253,"text":1425},"WaterRising Institute \u002F UN Water",[1882,1884,1888,1893],{"sort":437,"role":1883,"value":285},"Co-Producer",{"sort":264,"role":1885,"value":1886,"uri":1887},"Convener","WaterRising Institute","https:\u002F\u002Fwaterrising.org",{"sort":1889,"role":1890,"value":1891,"uri":1892},99,"Venue","Fotografiska Stockholm","https:\u002F\u002Fstockholm.fotografiska.com\u002Fen",{"sort":1346,"role":1894,"value":1895,"uri":1896},"Catering","Sopköket","https:\u002F\u002Fsopkoket.se",[1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1926,1928],{"src":1899},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-01.jpg",{"src":1901},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-02.jpg",{"src":1903},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-03.jpg",{"src":1905},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-04.jpg",{"src":1907},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-05.jpg",{"src":1909},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-06.jpg",{"src":1911},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-07.jpg",{"src":1913},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-08.jpg",{"src":1915},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-09.jpg",{"src":1917},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-10.jpg",{"src":1919},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-11.jpg",{"src":1921},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-12.jpg",{"src":1923},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-13.jpg",{"src":1925},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-14.jpg",{"src":1927},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-15.jpg",{"src":1929},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterrising-institute-waterwoman-launch-event-16.jpg",[561],{"src":1932,"alt":1818},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event\u002Fwaterwoman-project-launch-event.jpg","Kick-off event for WaterRising Institute's WaterWoman Project at Stockholm Water Week 2022. A private industry dinner held at Fotografiska, the photography museum on the Söderström.",[1935],"Event Production",{},"\u002Fwork\u002Fwaterrising-institute-waterwoman-launch-event",{"title":1818,"description":252},120,"work\u002Fwaterrising-institute-waterwoman-launch-event",[1942,1943,1944],"Stockholm","World Water Week","Networking",2022,"ufe4AD7-xbFFtEwsNcp8eB6-vszx4ZYdQZ7xLfVopvM",{"id":1948,"title":1949,"body":1950,"client":1963,"credits":1964,"description":252,"extension":289,"featured":290,"gallery":1982,"geo":1997,"keyart":1998,"lede":2000,"mediaType":2001,"meta":2002,"navigation":301,"path":2003,"seo":2004,"sort":2005,"status":305,"stem":2006,"tags":2007,"vertical":1813,"year":2011,"yt_video":318,"__hash__":2012},"casestudies\u002Fwork\u002Fwaterrising-institute-un-water-2023-youth-gender-hub.md","Youth & Gender Hub at the 2023 UN Water Conference",{"type":8,"value":1951,"toc":1960},[1952,1954,1957],[38,1953,328],{"id":327},[16,1955,1956],{},"As part of the WaterWoman Project, WaterRising Institute hosted the Gender and Youth Hub to bring young people into water careers. The day's programming featured leaders from utilities, private industry, associations, NGOs, and philanthropy talking about water management's role in public and environmental health, and the technology taking the water sector digital.",[16,1958,1959],{},"Discussion focused on how water jobs can provide sustainable careers and prosperity, especially for women and people of color, from inside the communities the water sector serves. Attendees included STEM students, young professionals, and mid-career workers from the NYC metropolitan area.",{"title":252,"searchDepth":253,"depth":253,"links":1961},[1962],{"id":327,"depth":253,"text":328},"WaterRising Institute \u002F NYC Mayor's Office of International Affairs",[1965,1967,1969,1973,1976,1978],{"sort":437,"role":1966,"value":285},"Digital Streaming & Event Production",{"sort":264,"role":1968,"value":1886,"uri":1887},"Co-Host & Convener",{"sort":733,"role":1970,"value":1971,"uri":1972},"Co-Host","NYC Mayor's Office for International Affairs","https:\u002F\u002Fwww.nyc.gov\u002Fsite\u002Finternational\u002Findex.page",{"sort":738,"role":1970,"value":1974,"uri":1975},"NYC Department of Environmental Protection","https:\u002F\u002Fwww.nyc.gov\u002Fsite\u002Fdep\u002Findex.page",{"sort":304,"role":1970,"value":1977},"NYC Junior Ambassadors",{"sort":1375,"role":1979,"value":1980,"uri":1981},"Event Host","German Consulate General in New York","https:\u002F\u002Fwww.germany.info\u002Fus-en\u002Fembassy-consulates\u002Fnewyork",[1983,1985,1987,1989,1991,1993,1995],{"src":1984},"\u002Fwork\u002Fwaterrising-institute-un-water-2023-youth-gender-hub\u002Fwaterrising-institute-un-water-2023-youth-gender-hub-01.jpg",{"src":1986},"\u002Fwork\u002Fwaterrising-institute-un-water-2023-youth-gender-hub\u002Fwaterrising-institute-un-water-2023-youth-gender-hub-02.jpg",{"src":1988},"\u002Fwork\u002Fwaterrising-institute-un-water-2023-youth-gender-hub\u002Fwaterrising-institute-un-water-2023-youth-gender-hub-03.jpg",{"src":1990},"\u002Fwork\u002Fwaterrising-institute-un-water-2023-youth-gender-hub\u002Fwaterrising-institute-un-water-2023-youth-gender-hub-04.jpg",{"src":1992},"\u002Fwork\u002Fwaterrising-institute-un-water-2023-youth-gender-hub\u002Fwaterrising-institute-un-water-2023-youth-gender-hub-05.jpg",{"src":1994},"\u002Fwork\u002Fwaterrising-institute-un-water-2023-youth-gender-hub\u002Fwaterrising-institute-un-water-2023-youth-gender-hub-06.jpg",{"src":1996},"\u002Fwork\u002Fwaterrising-institute-un-water-2023-youth-gender-hub\u002Fwaterrising-institute-un-water-2023-youth-gender-hub-07.jpg",[293],{"src":1999,"alt":1949},"\u002Fwork\u002Fwaterrising-institute-un-water-2023-youth-gender-hub\u002Fyouth-gender-hub-at-the-2023-un-water-conference.jpg","Digital streaming and event production for the Youth & Gender Hub at the 2023 UN Water Conference, a day of programming convening utilities, NGOs, and STEM students in NYC.",[1935],{},"\u002Fwork\u002Fwaterrising-institute-un-water-2023-youth-gender-hub",{"title":1949,"description":252},130,"work\u002Fwaterrising-institute-un-water-2023-youth-gender-hub",[2008,2009,2010,314],"Conference","Youth","Streaming",2023,"17jheLe-FZuQXuGYI-f53rzr_01xlZQZhxWWInrX_jU",{"id":2014,"title":2015,"body":2016,"client":2074,"credits":2075,"description":252,"extension":289,"featured":290,"gallery":2078,"geo":2079,"keyart":2081,"lede":2083,"mediaType":2084,"meta":2086,"navigation":301,"path":2087,"seo":2088,"sort":2089,"status":305,"stem":2090,"tags":2091,"vertical":581,"year":2096,"yt_video":318,"__hash__":2097},"casestudies\u002Fwork\u002Fyapi-kredi-bankasi-atm-prototyping.md","ATM Interface Prototyping",{"type":8,"value":2017,"toc":2065},[2018,2020,2023,2027,2030,2032,2036,2039,2047,2051,2054,2062],[38,2019,328],{"id":327},[16,2021,2022],{},"In Turkiye, ATMs do a lot more than they do in the US — rent, utilities, even citizen-services tasks. That makes speed and clarity of the ATM experience a real competitive lever for the bank.",[636,2024,2026],{"id":2025},"project-initiation-and-goals","Project Initiation and Goals",[16,2028,2029],{},"The project started with a visit to the client's technology center in Gebze, where we learned the hardware was fairly rudimentary (Windows 97 PCs inside a metal box, basically). The goal was to test new software concepts designed to speed up the ATM experience. The process centered on UX research and executive review of the new concepts.",[38,2031,1763],{"id":1762},[636,2033,2035],{"id":2034},"methodology-rapid-physical-prototyping","Methodology: Rapid Physical Prototyping",[16,2037,2038],{},"We used the Istanbul studio's MAKEshop, an embedded maker space for prototyping digital and hybrid smart solutions.",[58,2040,2041,2044],{},[61,2042,2043],{},"Hardware and Materials: The ATM prototype was built from off-the-shelf makerspace hardware and craft materials, with commodity hardware and custom electronics where the interaction needed it.",[61,2045,2046],{},"Purpose: The physical interface let us test different software experiences in a real-world rig.",[636,2048,2050],{"id":2049},"results-agile-development-and-client-preview","Results: Agile Development and Client Preview",[16,2052,2053],{},"The prototyping approach gave us a few things:",[614,2055,2056,2059],{},[61,2057,2058],{},"Rapid prototyping and agile changes. Commodity hardware and a maker space meant we could iterate the physical model and the software concepts together.",[61,2060,2061],{},"Client insight. The physical model let the client \"preview\" new experiences in the context of a consumer actually using the ATM, which made executive review and decision-making concrete.",[16,2063,2064],{},"The project shows the link between low-fidelity physical construction and high-value digital strategy: build the box cheap, test the software in the box, ship what works.",{"title":252,"searchDepth":253,"depth":253,"links":2066},[2067,2070],{"id":327,"depth":253,"text":328,"children":2068},[2069],{"id":2025,"depth":724,"text":2026},{"id":1762,"depth":253,"text":1763,"children":2071},[2072,2073],{"id":2034,"depth":724,"text":2035},{"id":2049,"depth":724,"text":2050},"Yapi ve Kredi Bankasi (Unicredit)",[2076],{"sort":437,"role":1645,"value":2077},"Fjord Istanbul",[],[2080],"Middle East",{"src":2082,"alt":2015},"\u002Fwork\u002Fyapi-kredi-bankasi-atm-prototyping\u002Fatm-interface-prototyping.jpg","ATM UX research for Yapı Kredi (Unicredit), Turkey's third-largest bank, testing software experiences against a physical prototype built in Fjord Istanbul's MAKEshop.",[2085],"UX Design",{},"\u002Fwork\u002Fyapi-kredi-bankasi-atm-prototyping",{"title":2015,"description":252},140,"work\u002Fyapi-kredi-bankasi-atm-prototyping",[2092,2093,2094,2095],"ATM","UX Research","Prototyping","Banking",2015,"_xAhIv87wJSHgk5jZxYG6ZoKMAn8kYwsRjmJR_hcNao",{"id":2099,"title":2100,"body":2101,"client":2133,"credits":2134,"description":252,"extension":289,"featured":290,"gallery":2136,"geo":2137,"keyart":2138,"lede":2140,"mediaType":2141,"meta":2143,"navigation":301,"path":2144,"seo":2145,"sort":2146,"status":305,"stem":2147,"tags":2148,"vertical":2152,"year":2153,"yt_video":318,"__hash__":2154},"casestudies\u002Fwork\u002Fvodafone-park-design-thinking-workshop.md","Design Thinking Workshop",{"type":8,"value":2102,"toc":2128},[2103,2105,2108,2111,2115,2118,2121,2125],[38,2104,1824],{"id":1823},[16,2106,2107],{},"In April 2016, the old Beşiktaş home ground near Dolmabahçe Palace was replaced by a new 41,903-seat venue branded as Vodafone Park. Vodafone Park wasn't just a football venue. It was a multi-purpose property hosting concerts, corporate events, and daily operations for one of the most passionately followed clubs in Turkish sport. Beşiktaş fandom in Istanbul is generational; people don't pick a club, they inherit one.",[16,2109,2110],{},"Vodafone Park needed a digital-experience strategy. The default framing was: \"design for the fan.\" We argued the brief was bigger than that.",[38,2112,2114],{"id":2113},"the-expansion","The expansion",[16,2116,2117],{},"I co-led a design thinking workshop out of Fjord Istanbul, working with the client team to map experiences for everyone the property actually touched. Not just the season-ticket holder. The concession-stand worker logging in for a six-hour shift on match day. The maintenance crew servicing forty thousand seats every week. The vendor delivering supplies through a non-public entrance at five in the morning. The casual concertgoer who comes once and never again. The corporate-suite client. The neighborhood resident who lives in the property's daily shadow.",[16,2119,2120],{},"Each of those people interfaces with the same physical asset and walks away with a completely different relationship to it. A digital strategy that only optimizes for the season-ticket holder leaves the rest of the network unsupported, which means the asset itself runs less smoothly than it could.",[38,2122,2124],{"id":2123},"what-came-out-of-it","What came out of it",[16,2126,2127],{},"The workshops produced a stakeholder map and a backlog of product opportunities for the digital platform, organized by who the change actually served. The most useful deliverable was the reframe itself: pushing the client's mental model from \"fan experience\" to \"every-person-the-property-touched experience\" gave the work a much more honest scope to ship against.",{"title":252,"searchDepth":253,"depth":253,"links":2129},[2130,2131,2132],{"id":1823,"depth":253,"text":1824},{"id":2113,"depth":253,"text":2114},{"id":2123,"depth":253,"text":2124},"Vodafone Park",[2135],{"sort":437,"role":1645,"value":2077},[],[2080],{"src":2139,"alt":2100},"\u002Fwork\u002Fvodafone-park-design-thinking-workshop\u002Fdesign-thinking-workshop.jpg","A design-thinking workshop for Vodafone Park in Istanbul, run with Fjord, looking at not just fans but everyone Vodafone Park touched: employees, vendors, partners, and beyond.",[2142],"Workshop",{},"\u002Fwork\u002Fvodafone-park-design-thinking-workshop",{"title":2100,"description":252},150,"work\u002Fvodafone-park-design-thinking-workshop",[2149,2150,2151],"Service Design","Stakeholder Mapping","Istanbul","Consulting",2016,"aefI3DNuZwqPsd5UEihMoACSa1qFuX7wrwfgc2o3VtA",{"id":2156,"title":2157,"body":2158,"client":1886,"credits":318,"description":252,"extension":289,"featured":290,"gallery":2236,"geo":2237,"keyart":2238,"lede":2240,"mediaType":2241,"meta":2242,"navigation":301,"path":2243,"seo":2244,"sort":2245,"status":305,"stem":2246,"tags":2247,"vertical":2152,"year":2251,"yt_video":318,"__hash__":2252},"casestudies\u002Fwork\u002Fwaterrising-institute-creative-technology-advisory.md","Creative & Technology Advisory",{"type":8,"value":2159,"toc":2230},[2160,2162,2165,2167,2170,2193,2197,2223,2227],[38,2161,1824],{"id":1823},[16,2163,2164],{},"WaterRising Institute is a small Detroit-based non-profit working on the global gender gap in water and the talent crisis facing the water industry. They convene difficult conversations across the UN, multilateral lenders, public utilities, and private-sector water companies. Their primary asset is convening power, not headcount. To use it well, they needed a digital and creative posture that could keep up with the rooms they were walking into. That's where I came in.",[38,2166,1412],{"id":1411},[16,2168,2169],{},"Senior creative and technology advisor from 2022 through early 2026. The role spans:",[58,2171,2172,2178,2184],{},[61,2173,2174,2177],{},[1841,2175,2176],{},"Brand and storytelling."," Helping the org sharpen how it explains itself to funders, partners, and the press, so the institutional weight of UN-adjacent convening lands on first contact.",[61,2179,2180,2183],{},[1841,2181,2182],{},"Event and digital production."," Directing and producing the hybrid events the WaterRising name shows up at: UN Water Week, WEFTEC, Stockholm International Water Institute's World Water Week, and others. On-site streaming, show-call, post-production, and the editorial choices that decide what becomes the public record of each gathering.",[61,2185,2186,2189,2190,2192],{},[1841,2187,2188],{},"Technology decisions."," Recommending tools and platforms a small staff can actually run, designing systems that fit a non-profit budget, and standing in for technical leadership when an in-house version isn't there yet. Same orientation as my work for the ",[30,2191,434],{"href":453},": get a small org's digital posture current without overwhelming the people running it.",[38,2194,2196],{"id":2195},"sample-work-under-this-engagement","Sample work under this engagement",[58,2198,2199,2204,2209,2216],{},[61,2200,2201,2203],{},[30,2202,1818],{"href":1937},": Stockholm Water Week 2022 kick-off dinner at Fotografiska for 300 industry guests",[61,2205,2206,2208],{},[30,2207,1949],{"href":2003},": full-day digital streaming and event production at the German Consulate in NYC",[61,2210,2211,2215],{},[30,2212,2214],{"href":2213},"\u002Fwork\u002Fwaterrising-institute-project-explainer-video","Project Explainer Video",": short-form narrative anchor for pitch decks and conference openers",[61,2217,2218,2222],{},[30,2219,2221],{"href":2220},"\u002Fwork\u002Fus-epa-water-tower-report-layout","Print Design, Layout & Production",": EPA-funded research report for The Water Tower in partnership with WaterRising Institute",[38,2224,2226],{"id":2225},"how-the-engagement-works","How the engagement works",[16,2228,2229],{},"The role isn't a single contract or a fixed deliverable list. It was an ongoing relationship: I was pulled in when a moment matters (a launch, a UN-week deployment, a research-report drop) and was available between those for the brand, technology, and digital-tooling decisions that compound over time. The cadence fits the org. Small non-profits don't need a full-time creative director; they need someone they trust who shows up at scale when the calendar demands it.",{"title":252,"searchDepth":253,"depth":253,"links":2231},[2232,2233,2234,2235],{"id":1823,"depth":253,"text":1824},{"id":1411,"depth":253,"text":1412},{"id":2195,"depth":253,"text":2196},{"id":2225,"depth":253,"text":2226},[],[745],{"src":2239,"alt":2157},"\u002Fwork\u002Fwaterrising-institute-creative-technology-advisory\u002Fcreative-technology-advisory.jpg","Senior creative and technology advisor to WaterRising Institute, sharpening the Detroit-based non-profit's digital storytelling, brand, and event delivery for international audiences.",[569],{},"\u002Fwork\u002Fwaterrising-institute-creative-technology-advisory",{"title":2157,"description":252},160,"work\u002Fwaterrising-institute-creative-technology-advisory",[2248,2249,464,2250],"Brand","Strategy","Storytelling","2022-2026","QCygm3eipsPumxf9qK_AG-2WkINGxT5_rpeEhn9laeI",{"id":2254,"title":2255,"body":2256,"client":728,"credits":2338,"description":252,"extension":289,"featured":290,"gallery":2341,"geo":2348,"keyart":2349,"lede":2351,"mediaType":2352,"meta":2354,"navigation":301,"path":2355,"seo":2356,"sort":2357,"status":305,"stem":2358,"tags":2359,"vertical":2364,"year":465,"yt_video":318,"__hash__":2365},"casestudies\u002Fwork\u002Fdevelopment-contentflow.md","ContentFlow",{"type":8,"value":2257,"toc":2332},[2258,2260,2263,2267,2312,2316,2322,2325,2329],[38,2259,328],{"id":327},[16,2261,2262],{},"ContentFlow is a personal-but-production-grade content planning system designed to handle the realities of multi-channel publishing. A single piece of work (an article, a video, a podcast episode) fans out across many destinations like Substack, Medium, LinkedIn, YouTube, and Acast, and is followed by a tail of promotional posts across social platforms. ContentFlow models that lifecycle directly so the planning, scheduling, and post-mortem live in one place rather than scattered across spreadsheets, calendar invites, and a Notion page nobody reads.",[38,2264,2266],{"id":2265},"architecture","Architecture",[58,2268,2269,2275,2281,2287,2293,2302],{},[61,2270,2271,2274],{},[19,2272,2273],{},"Backend:"," Django 6 with Django REST Framework, drf-spectacular for OpenAPI, and django-filter for query composition.",[61,2276,2277,2280],{},[19,2278,2279],{},"Database:"," PostgreSQL via psycopg 3.",[61,2282,2283,2286],{},[19,2284,2285],{},"Admin UX:"," django-unfold for a modernized admin surface. The admin is the primary operator UI here, not an afterthought.",[61,2288,2289,2292],{},[19,2290,2291],{},"Static + serving:"," WhiteNoise for static assets and Gunicorn for app serving, all containerized.",[61,2294,2295,2298,2299,36],{},[19,2296,2297],{},"Deploy:"," A single VPS behind an existing Traefik reverse proxy. Images build locally and push to a private registry; the production compose file pulls and runs migrations from the entrypoint. DNS at ",[795,2300,2301],{},"cf.five59.com",[61,2303,2304,2307,2308,2311],{},[19,2305,2306],{},"Calendar export:"," First-class iCal output via ",[795,2309,2310],{},"icalendar",", so any planning view can be subscribed to from a real calendar app.",[38,2313,2315],{"id":2314},"contentflow-mcp","ContentFlow MCP",[16,2317,2318,2319,2321],{},"A companion ",[795,2320,2314],{}," package exposes the API to AI assistants via the Model Context Protocol, so a conversational agent can read the publishing pipeline, propose scheduling, and write back updates without screen-scraping the admin.",[16,2323,2324],{},"This is intentionally a small, separate package: the core ContentFlow app stays AI-agnostic, and the MCP layer can evolve (or be replaced) without touching the data model.",[38,2326,2328],{"id":2327},"why-a-personal-project-that-looks-like-production","Why a personal project that looks like production",[16,2330,2331],{},"The goal isn't \"the simplest thing that works for me.\" It's \"a sharply scoped tool that demonstrates the deploy story I'd recommend to a client.\" Traefik routing, container registry workflow, migration-on-entrypoint, structured admin UX, and an MCP integration layer are all things that real teams want; building them on a project I personally use means they've been pressure-tested before they're pitched.",{"title":252,"searchDepth":253,"depth":253,"links":2333},[2334,2335,2336,2337],{"id":327,"depth":253,"text":328},{"id":2265,"depth":253,"text":2266},{"id":2314,"depth":253,"text":2315},{"id":2327,"depth":253,"text":2328},[2339],{"sort":437,"role":731,"value":285,"uri":2340},"https:\u002F\u002Flinkedin.com\u002Fin\u002Fmarconi",[2342,2345],{"src":2343,"alt":2344},"\u002Fwork\u002Fdevelopment-contentflow\u002Fcontentflow-dashboard.jpg","Dashboard",{"src":2346,"alt":2347},"\u002Fwork\u002Fdevelopment-contentflow\u002Fcontentflow-calendar.jpg","Editorial calendar",[745],{"src":2350,"alt":2255},"\u002Fwork\u002Fdevelopment-contentflow\u002Fcontentflow-keyart.jpg","A self-hosted content-planning tool tracking publishing across Substack, LinkedIn, YouTube, Acast, and the social platforms, with a companion API and MCP server for AI co-planning.",[451,2353],"MCP Server",{},"\u002Fwork\u002Fdevelopment-contentflow",{"title":2255,"description":252},170,"work\u002Fdevelopment-contentflow",[1381,2360,2361,2362,2363,759],"PostgreSQL","DRF","MCP","Docker","Productivity","5i5Ew9epRO6fe9gY0xpcIou9_3LUm9OpT41oLWfRyjg",{"id":2367,"title":2368,"body":2369,"client":728,"credits":318,"description":252,"extension":289,"featured":290,"gallery":2698,"geo":2699,"keyart":2700,"lede":2703,"mediaType":2704,"meta":2705,"navigation":301,"path":2706,"seo":2707,"sort":2708,"status":305,"stem":2709,"tags":2710,"vertical":760,"year":1627,"yt_video":318,"__hash__":2714},"casestudies\u002Fwork\u002Fdevelopment-flytrap.md","Flytrap: Real-Time Traffic Monitoring",{"type":8,"value":2370,"toc":2685},[2371,2373,2376,2379,2381,2395,2399,2402,2416,2420,2423,2434,2437,2454,2457,2474,2478,2481,2495,2499,2510,2514,2525,2529,2532,2555,2558,2593,2597,2600,2603,2614,2617,2628,2631,2642,2645,2656,2659,2682],[38,2372,328],{"id":327},[16,2374,2375],{},"Flytrap is a real-time object detection and tracking system for live video streams. Built on YOLO11 (You Only Look Once v11) and designed for SRT (Secure Reliable Transport) streams, it tracks vehicles, people, and bicycles and calculates movement metrics like direction and speed.",[16,2377,2378],{},"It started as a learning exercise to get hands-on with computer vision and object detection, and grew into a production system with monitoring and analytics.",[38,2380,415],{"id":414},[58,2382,2383,2389],{},[61,2384,1290,2385],{},[30,2386,2387],{"href":2387,"rel":2388},"https:\u002F\u002Ffive59.github.io\u002Fflytrap",[34],[61,2390,1298,2391],{},[30,2392,2393],{"href":2393,"rel":2394},"https:\u002F\u002Fgithub.com\u002Ffive59\u002Fflytrap",[34],[38,2396,2398],{"id":2397},"system-pipeline","System pipeline",[16,2400,2401],{},"A four-stage workflow:",[614,2403,2404,2407,2410,2413],{},[61,2405,2406],{},"Stream reception: SRT video streams come in through the multi-method fallback system.",[61,2408,2409],{},"Frame processing: motion detection decides whether to run inference, skipping when nothing moves.",[61,2411,2412],{},"Analytics engine: direction detection picks up left-to-right and right-to-left movement via midpoint crossing; speed estimation gives mph based on configurable road width.",[61,2414,2415],{},"Data storage: metrics get logged to files and stored in InfluxDB for historical analysis and real-time monitoring through Grafana dashboards.",[636,2417,2419],{"id":2418},"features","Features",[16,2421,2422],{},"Processing",[58,2424,2425,2428,2431],{},[61,2426,2427],{},"Motion-based inference: skips frames when nothing's moving, cutting compute load.",[61,2429,2430],{},"Region of Interest (ROI) support: focus detection on specific areas (like road surfaces) for better accuracy and speed.",[61,2432,2433],{},"Built-in object tracking across frames.",[16,2435,2436],{},"Analytics and monitoring",[58,2438,2439,2442,2445,2448,2451],{},[61,2440,2441],{},"Direction detection from spatial algorithms.",[61,2443,2444],{},"Speed estimation in mph from configurable parameters.",[61,2446,2447],{},"Time-series storage in InfluxDB.",[61,2449,2450],{},"Grafana dashboards for live monitoring.",[61,2452,2453],{},"Annotated screenshots for detected events.",[16,2455,2456],{},"Production features",[58,2458,2459,2462,2465,2468,2471],{},[61,2460,2461],{},"Multi-platform: Linux, Windows (WSL2), macOS.",[61,2463,2464],{},"Hardware acceleration: auto-detects and uses CUDA, MPS, or CPU.",[61,2466,2467],{},"Stream resilience: fallback between GStreamer, OpenCV, and FFmpeg.",[61,2469,2470],{},"Headless operation for server environments.",[61,2472,2473],{},"Docker config for deployment.",[38,2475,2477],{"id":2476},"technical-architecture","Technical architecture",[16,2479,2480],{},"The stack:",[58,2482,2483,2486,2489,2492],{},[61,2484,2485],{},"YOLO11 object detection: 22% fewer parameters than YOLOv8, with higher mean Average Precision (mAP) on benchmark datasets. YOLO11 adds the C3k2 block, SPPF (Spatial Pyramid Pooling Fast), and C2PSA (Cross-Stage Partial Attention) for better feature extraction.",[61,2487,2488],{},"SRT streaming protocol: Secure Reliable Transport is an open-source protocol for sub-second live video. SRT combines UDP's speed with TCP-style error correction, delivering reliable streams over unpredictable networks with end-to-end AES encryption.",[61,2490,2491],{},"Multi-method stream reception: fallback chain (GStreamer → OpenCV → FFmpeg) so streams come through regardless of system configuration.",[61,2493,2494],{},"Hardware acceleration: CUDA for NVIDIA GPUs, Apple Metal Performance Shaders (MPS) for Mac, and optimized CPU processing, with automatic hardware detection.",[636,2496,2498],{"id":2497},"supported-platforms","Supported Platforms",[58,2500,2501,2504,2507],{},[61,2502,2503],{},"Linux (native)",[61,2505,2506],{},"Windows (via WSL2)",[61,2508,2509],{},"macOS (with MPS acceleration support)",[636,2511,2513],{"id":2512},"hardware-requirements","Hardware Requirements",[58,2515,2516,2519,2522],{},[61,2517,2518],{},"NVIDIA GPU with CUDA support (optional, for acceleration)",[61,2520,2521],{},"Apple Silicon with Metal support (optional, for MPS acceleration)",[61,2523,2524],{},"Multi-core CPU for CPU-only processing",[38,2526,2528],{"id":2527},"problem","Problem",[16,2530,2531],{},"Real-time object detection from live streams has several technical challenges that have to be solved together for a production system:",[614,2533,2534,2537,2540,2543,2546,2549,2552],{},[61,2535,2536],{},"Stream reliability and network resilience",[61,2538,2539],{},"Computational efficiency vs. detection accuracy",[61,2541,2542],{},"Cross-platform hardware acceleration",[61,2544,2545],{},"Long-term stability and memory management",[61,2547,2548],{},"Analytics and historical insight",[61,2550,2551],{},"Deployment complexity",[61,2553,2554],{},"Object movement analysis",[16,2556,2557],{},"To handle these, the system needed to:",[58,2559,2560,2563,2566,2569,2572,2575,2578,2581,2584,2587,2590],{},[61,2561,2562],{},"Process live SRT video streams with sub-second latency and network resilience.",[61,2564,2565],{},"Hit real-time object detection (vehicles, people, bicycles) at 15+ fps.",[61,2567,2568],{},"Auto-use CUDA, MPS, or CPU acceleration based on available hardware.",[61,2570,2571],{},"Run for days or weeks without memory degradation or crashes.",[61,2573,2574],{},"Calculate movement direction and estimate speed in mph.",[61,2576,2577],{},"Store detection metrics in a queryable time-series database.",[61,2579,2580],{},"Provide a real-time monitoring dashboard for system health and detection stats.",[61,2582,2583],{},"Support headless deployment.",[61,2585,2586],{},"Handle stream interruptions with automatic reconnection.",[61,2588,2589],{},"Generate annotated screenshots for detected events.",[61,2591,2592],{},"Minimize false positives through configurable region-of-interest filtering.",[38,2594,2596],{"id":2595},"learning-outcomes","Learning outcomes",[16,2598,2599],{},"The project hit its learning goals and ended up as a production system.",[16,2601,2602],{},"Computer vision",[58,2604,2605,2608,2611],{},[61,2606,2607],{},"Hands-on with current object detection (YOLO11).",[61,2609,2610],{},"Tracking algorithms and motion detection.",[61,2612,2613],{},"Region-based processing and spatial analytics.",[16,2615,2616],{},"System architecture",[58,2618,2619,2622,2625],{},[61,2620,2621],{},"Fault-tolerant streaming pipelines with fallback.",[61,2623,2624],{},"Hardware acceleration across CUDA, MPS, and CPU.",[61,2626,2627],{},"Memory management and resource optimization for long-running processes.",[16,2629,2630],{},"DevOps and monitoring",[58,2632,2633,2636,2639],{},[61,2634,2635],{},"Time-series databases for metrics.",[61,2637,2638],{},"Real-time Grafana dashboards.",[61,2640,2641],{},"Headless server deployment and environment detection.",[16,2643,2644],{},"Video streaming",[58,2646,2647,2650,2653],{},[61,2648,2649],{},"SRT protocol implementation.",[61,2651,2652],{},"Multi-codec support and stream processing optimization.",[61,2654,2655],{},"Network resilience and error recovery.",[16,2657,2658],{},"Flytrap pulls those threads into a modular, fault-tolerant architecture with specialized subsystems:",[614,2660,2661,2664,2667,2670,2673,2676,2679],{},[61,2662,2663],{},"Resilient streaming infrastructure with fallback",[61,2665,2666],{},"Motion-aware inference optimization",[61,2668,2669],{},"Hardware-adaptive acceleration layer",[61,2671,2672],{},"Aggressive memory management",[61,2674,2675],{},"Time-series analytics stack",[61,2677,2678],{},"Containerized deployment with auto-configuration",[61,2680,2681],{},"Spatial analytics engine",[16,2683,2684],{},"What started as a learning exercise turned into a production-grade system covering ML operations, streaming infrastructure, and observability.",{"title":252,"searchDepth":253,"depth":253,"links":2686},[2687,2688,2689,2692,2696,2697],{"id":327,"depth":253,"text":328},{"id":414,"depth":253,"text":415},{"id":2397,"depth":253,"text":2398,"children":2690},[2691],{"id":2418,"depth":724,"text":2419},{"id":2476,"depth":253,"text":2477,"children":2693},[2694,2695],{"id":2497,"depth":724,"text":2498},{"id":2512,"depth":724,"text":2513},{"id":2527,"depth":253,"text":2528},{"id":2595,"depth":253,"text":2596},[],[745],{"src":2701,"alt":2702},"\u002Fwork\u002Fdevelopment-flytrap\u002Fkeyart.jpg","Flytrap","An open-source real-time object-detection pipeline for live SRT video streams, built on YOLO11 with motion-aware inference and CUDA\u002FMPS\u002FCPU acceleration.",[451],{},"\u002Fwork\u002Fdevelopment-flytrap",{"title":2368,"description":252},180,"work\u002Fdevelopment-flytrap",[2711,2712,2713,2010,759],"Computer Vision","YOLO11","SRT","VIvU1jKoMfb5vhV1M4fgL1c3OATayoNf7TQADVAO7CY",{"id":2716,"title":2717,"body":2718,"client":728,"credits":2778,"description":252,"extension":289,"featured":290,"gallery":2781,"geo":2782,"keyart":2783,"lede":2785,"mediaType":2786,"meta":2788,"navigation":301,"path":2789,"seo":2790,"sort":2791,"status":305,"stem":2792,"tags":2793,"vertical":760,"year":1627,"yt_video":318,"__hash__":2799},"casestudies\u002Fwork\u002Fdevelopment-moodbench.md","MoodBench",{"type":8,"value":2719,"toc":2773},[2720,2722,2725,2728,2732,2762,2764],[38,2721,328],{"id":327},[16,2723,2724],{},"MoodBench is an automated benchmarking framework that fine-tunes, evaluates, and compares small language models for sentiment analysis. It uses Parameter-Efficient Fine-Tuning (PEFT) with LoRA so that meaningful experiments can run on a single Apple Silicon laptop or modest GPU, closing the gap between \"I'd like to evaluate this for my use case\" and \"I have the budget to spin up an H100.\"",[16,2726,2727],{},"A secondary capability calculates an approximate Net Promoter Score (NPS) over review corpora as a proof-of-concept for downstream business signals layered on top of sentiment classification.",[38,2729,2731],{"id":2730},"whats-interesting-about-it","What's interesting about it",[58,2733,2734,2740,2746,2752],{},[61,2735,2736,2739],{},[19,2737,2738],{},"17 models, one harness."," Coverage spans ultra-tiny (BERT-tiny at 4M params) to medium research-grade (Gemma-2-2B, Pythia-410m), letting you make like-for-like comparisons across architecture families and parameter budgets.",[61,2741,2742,2745],{},[19,2743,2744],{},"Memory-bounded."," All configurations are designed to fit under 6 GB on Apple Silicon, making the entire suite reproducible without cloud spend.",[61,2747,2748,2751],{},[19,2749,2750],{},"Thorough metrics."," Beyond accuracy and F1: balanced accuracy, latency percentiles, throughput, memory, statistical-significance testing, and robustness checks.",[61,2753,2754,2757,2758,2761],{},[19,2755,2756],{},"Two interfaces."," A CLI (",[795,2759,2760],{},"uv run moodbench …",") for CI\u002FCD and reproducible runs, and a Gradio web UI for interactive exploration.",[38,2763,415],{"id":414},[58,2765,2766],{},[61,2767,1298,2768],{},[30,2769,2772],{"href":2770,"rel":2771},"https:\u002F\u002Fgithub.com\u002Fandrewmarconi\u002FMoodBench",[34],"github.com\u002Fandrewmarconi\u002FMoodBench",{"title":252,"searchDepth":253,"depth":253,"links":2774},[2775,2776,2777],{"id":327,"depth":253,"text":328},{"id":2730,"depth":253,"text":2731},{"id":414,"depth":253,"text":415},[2779,2780],{"sort":437,"role":731,"value":285,"uri":2340},{"sort":264,"role":739,"value":2772,"uri":2770},[],[745],{"src":2784,"alt":2717},"\u002Fwork\u002Fdevelopment-moodbench\u002Fmoodbench-keyart.jpg","A multi-LLM sentiment-analysis benchmark: fine-tunes, evaluates, and compares 17 small language models (4M to 410M parameters) on consumer hardware using LoRA.",[2787],"CLI Tool",{},"\u002Fwork\u002Fdevelopment-moodbench",{"title":2717,"description":252},190,"work\u002Fdevelopment-moodbench",[2794,2795,2796,2797,2798,759],"Python","LoRA","PEFT","NLP","Benchmarking","vG5iv_AlQVJT462bwao8HJMnLs7RvcxHXnephYv2GWc",{"id":2801,"title":2802,"body":2803,"client":728,"credits":2971,"description":252,"extension":289,"featured":290,"gallery":2974,"geo":2978,"keyart":2979,"lede":2981,"mediaType":2982,"meta":2983,"navigation":301,"path":2984,"seo":2985,"sort":2986,"status":305,"stem":2987,"tags":2988,"vertical":760,"year":465,"yt_video":318,"__hash__":2991},"casestudies\u002Fwork\u002Fdevelopment-tts-compare.md","TTS Compare",{"type":8,"value":2804,"toc":2965},[2805,2807,2810,2814,2817,2917,2921,2954,2956],[38,2806,328],{"id":327},[16,2808,2809],{},"TTS Compare lets you generate the same input across multiple open-source text-to-speech models in a single run, then compare quality, latency, and per-model feature support side-by-side. The project addresses a recurring practical question, \"which TTS should we ship?\", by replacing ad-hoc one-off testing with a reproducible harness.",[38,2811,2813],{"id":2812},"models-covered","Models covered",[16,2815,2816],{},"The harness currently runs eight models from across the modern open-source TTS field:",[160,2818,2819,2832],{},[163,2820,2821],{},[166,2822,2823,2826,2829],{},[169,2824,2825],{},"Model",[169,2827,2828],{},"Params",[169,2830,2831],{},"Notable feature",[179,2833,2834,2845,2856,2867,2877,2888,2898,2908],{},[166,2835,2836,2839,2842],{},[184,2837,2838],{},"Maya1",[184,2840,2841],{},"3B",[184,2843,2844],{},"17 emotion tags, voice description",[166,2846,2847,2850,2853],{},[184,2848,2849],{},"Kokoro-82M",[184,2851,2852],{},"82M",[184,2854,2855],{},"11 voice presets, very small",[166,2857,2858,2861,2864],{},[184,2859,2860],{},"Chatterbox",[184,2862,2863],{},"500M",[184,2865,2866],{},"5 emotion tags, reference-audio cloning",[166,2868,2869,2872,2874],{},[184,2870,2871],{},"Orpheus-3B",[184,2873,2841],{},[184,2875,2876],{},"vLLM backend (Linux only)",[166,2878,2879,2882,2885],{},[184,2880,2881],{},"Qwen3-TTS",[184,2883,2884],{},"1.7B",[184,2886,2887],{},"Voice description",[166,2889,2890,2893,2895],{},[184,2891,2892],{},"Fish Speech 1.5",[184,2894,2863],{},[184,2896,2897],{},"Reference-audio cloning",[166,2899,2900,2903,2905],{},[184,2901,2902],{},"CosyVoice 2",[184,2904,2863],{},[184,2906,2907],{},"Voice description + reference audio",[166,2909,2910,2913,2915],{},[184,2911,2912],{},"XTTS v2",[184,2914,2863],{},[184,2916,2897],{},[38,2918,2920],{"id":2919},"architecture-decisions","Architecture decisions",[58,2922,2923,2936,2942,2948],{},[61,2924,2925,2931,2932,2935],{},[1841,2926,2927,2928,36],{},"Per-model isolated ",[795,2929,2930],{},".venv"," Each model gets its own environment under ",[795,2933,2934],{},"models\u002F\u003Cname>\u002F"," to avoid CUDA\u002Ftorch version skew between systems with conflicting requirements.",[61,2937,2938,2941],{},[1841,2939,2940],{},"JSON-over-stdin worker protocol."," Each model is invoked as a subprocess that accepts a JSON request on stdin and writes a WAV file. Decoupling the harness from the model runtimes keeps the Textual TUI snappy and lets a model crash without taking the rest of the run down.",[61,2943,2944,2947],{},[1841,2945,2946],{},"Hardware adaptive."," Detects CUDA, MPS, or CPU and configures models accordingly.",[61,2949,2950,2953],{},[1841,2951,2952],{},"Three-screen TUI."," Input → model selection → execution, with real-time logs streaming as each model generates speech.",[38,2955,415],{"id":414},[58,2957,2958],{},[61,2959,1298,2960],{},[30,2961,2964],{"href":2962,"rel":2963},"https:\u002F\u002Fgithub.com\u002Fandrewmarconi\u002Ftts-compare",[34],"github.com\u002Fandrewmarconi\u002Ftts-compare",{"title":252,"searchDepth":253,"depth":253,"links":2966},[2967,2968,2969,2970],{"id":327,"depth":253,"text":328},{"id":2812,"depth":253,"text":2813},{"id":2919,"depth":253,"text":2920},{"id":414,"depth":253,"text":415},[2972,2973],{"sort":437,"role":731,"value":285,"uri":2340},{"sort":264,"role":739,"value":2964,"uri":2962},[2975],{"src":2976,"alt":2977},"\u002Fwork\u002Fdevelopment-tts-compare\u002Ftts-matrix-models.jpg","Model comparison matrix",[745],{"src":2980,"alt":2802},"\u002Fwork\u002Fdevelopment-tts-compare\u002Ftts-matrix-keyart.jpg","A side-by-side comparison framework for eight open-source text-to-speech models, with an interactive Textual TUI for evaluating quality, latency, and feature coverage.",[2787],{},"\u002Fwork\u002Fdevelopment-tts-compare",{"title":2802,"description":252},200,"work\u002Fdevelopment-tts-compare",[2794,2989,2990,2798,758,759],"TTS","Textual","gEl6Sqdh1VEnRZqMkeubsrkqtlhbpKiQL6U2C3OkvhA",{"id":2993,"title":2994,"body":2995,"client":3047,"credits":318,"description":252,"extension":289,"featured":290,"gallery":3048,"geo":3055,"keyart":3056,"lede":3058,"mediaType":3059,"meta":3061,"navigation":301,"path":3062,"seo":3063,"sort":3064,"status":305,"stem":3065,"tags":3066,"vertical":316,"year":3069,"yt_video":318,"__hash__":3070},"casestudies\u002Fwork\u002Foptirtc-brand-guidelines.md","Brand Guide Development & Design Support",{"type":8,"value":2996,"toc":3042},[2997,2999,3002,3006,3009,3012,3032,3036,3039],[38,2998,14],{"id":13},[16,3000,3001],{},"OptiRTC is a \"smart water\" company. They sell cloud services to municipalities, public-private partnerships, and governments to help manage flooding and water infrastructure. Their proprietary system pulls from multiple data sources (sensor data, weather, hydrologic models, and others) and runs them through AI that surfaces operational recommendations the people running a city's stormwater system can act on.",[38,3003,3005],{"id":3004},"what-i-did","What I did",[16,3007,3008],{},"The engagement started with the brand. OptiRTC had accumulated a disparate set of brand elements that didn't quite hang together: variants on the logo, inconsistent typography, color treatments that drifted across decks and the website. The first deliverable was a brand guideline that pulled all of it under one roof: a unified logo system, type scale, color palette, and the rules for using each.",[16,3010,3011],{},"That work became the basis for ongoing design support across the formats a small B2B firm actually ships in the field:",[58,3013,3014,3020,3026],{},[61,3015,3016,3019],{},[1841,3017,3018],{},"B2B marketing collateral."," One-pagers, case-study sheets, RFP-response templates, and the recurring formats their sales team uses with prospects.",[61,3021,3022,3025],{},[1841,3023,3024],{},"Presentation design."," Decks for sales, partnership briefings, and conference presentations, where the visual rigor compounds across many sessions.",[61,3027,3028,3031],{},[1841,3029,3030],{},"Web development."," Updates and contributions to the optirtc.com property, in the same visual language as the rest.",[38,3033,3035],{"id":3034},"whats-distinctive","What's distinctive",[16,3037,3038],{},"Brand work for a small water-tech firm is two problems at once. Internally, it's pulling everything that piled up over the years into one consistent face. Externally, it's standing out in a market that defaults to bland infrastructure-vendor visuals. Both problems share a solution: be specific. Specific enough that the brand stops looking like a generic stormwater consultancy and starts looking like the company that actually has the AI-powered recommendations municipalities want to buy.",[16,3040,3041],{},"That specificity was the brief. The brand guide is the artifact. The marketing materials, decks, and web work are where it earns its keep.",{"title":252,"searchDepth":253,"depth":253,"links":3043},[3044,3045,3046],{"id":13,"depth":253,"text":14},{"id":3004,"depth":253,"text":3005},{"id":3034,"depth":253,"text":3035},"OptiRTC",[3049,3051,3053],{"src":3050},"\u002Fwork\u002Foptirtc-brand-guidelines\u002Foptirtc-brand-guidelines-01.jpg",{"src":3052},"\u002Fwork\u002Foptirtc-brand-guidelines\u002Foptirtc-brand-guidelines-02.jpg",{"src":3054},"\u002Fwork\u002Foptirtc-brand-guidelines\u002Foptirtc-brand-guidelines-03.jpg",[293],{"src":3057,"alt":2994},"\u002Fwork\u002Foptirtc-brand-guidelines\u002Fbrand-guide-development-design-support.jpg","Brand guidelines and ongoing design support for OptiRTC, building one consistent visual face for the water-tech firm to wear across product, web, and outreach.",[3060,1458],"Brand Guidelines",{},"\u002Fwork\u002Foptirtc-brand-guidelines",{"title":2994,"description":252},210,"work\u002Foptirtc-brand-guidelines",[2248,3067,3068],"Visual Identity","Water Tech",2024,"-xYCS_Mghlowkbn4j3U73MVoTKF9XCtwPxp_iuM_8z8",{"id":3072,"title":3073,"body":3074,"client":3130,"credits":318,"description":252,"extension":289,"featured":290,"gallery":3131,"geo":3136,"keyart":3137,"lede":3139,"mediaType":3140,"meta":3141,"navigation":301,"path":3142,"seo":3143,"sort":3144,"status":305,"stem":3145,"tags":3146,"vertical":1469,"year":3150,"yt_video":318,"__hash__":3151},"casestudies\u002Fwork\u002Fsustainable-brands-integrated-web-platform.md","Integrated Web Platform",{"type":8,"value":3075,"toc":3125},[3076,3078,3081,3084,3087,3091,3094,3100,3106,3112,3116,3119],[38,3077,1824],{"id":1823},[16,3079,3080],{},"Sustainable Brands is the global community for business leaders who say their work has a purpose beyond shareholder return. Their flagship in-person event runs 2,500 to 3,500 attendees across three or four days, with regional events through the year, a corporate membership program and a year-round digital footprint that has to stitch the whole community together between gatherings.",[16,3082,3083],{},"When I was first introduced, the digital footprint was held together with tape. The web server was running an old operating system and an old Drupal version that had been compromised more than once. Nobody on staff could safely touch it.",[16,3085,3086],{},"That's where I started.",[38,3088,3090],{"id":3089},"what-i-built","What I built",[16,3092,3093],{},"The work moved through three rough phases.",[16,3095,3096,3099],{},[1841,3097,3098],{},"Stabilize."," I did digital forensics on the compromised infrastructure, extracted the content cleanly, and rebuilt the server on a current stack using Laravel rather than a pre-built CMS. The site stopped going down. The org stopped panicking every time a security advisory hit.",[16,3101,3102,3105],{},[1841,3103,3104],{},"Modernize."," Once the foundation was honest, I rewrote the publishing infrastructure: editorial approval workflows for a multi-author content team, a membership system, and payment integration tied through Salesforce so the conference, membership, and content products all spoke the same record-of-truth.",[16,3107,3108,3111],{},[1841,3109,3110],{},"Compound."," With a real platform underneath them, the org could push more weight into digital between events. The site stopped being a brochure for conferences and started being the connective tissue between them.",[38,3113,3115],{"id":3114},"why-this-engagement-is-on-the-list","Why this engagement is on the list",[16,3117,3118],{},"An honest \"modernization\" project at a small-to-mid-size mission-driven org looks like this: the web platform was the visible deliverable, but the durable contribution was rebuilding the operational foundation under it. Approval workflows people could actually use. A membership database that didn't need a developer to run a query. Payment plumbing that didn't break on every Salesforce update.",[16,3120,3121,3124],{},[19,3122,3123],{},"No company is perfect, but they're trying"," is the line I came to working for SB. Many of the members are large enterprises that get critiqued from the outside as performative, and some of that critique is fair. From the inside, you also see the people fighting hard for incremental progress and the cost of that work. Both things are true. The platform we built was for them.",{"title":252,"searchDepth":253,"depth":253,"links":3126},[3127,3128,3129],{"id":1823,"depth":253,"text":1824},{"id":3089,"depth":253,"text":3090},{"id":3114,"depth":253,"text":3115},"Sustainable Brands",[3132,3134],{"src":3133},"\u002Fwork\u002Fsustainable-brands-integrated-web-platform\u002Fsustainable-brands-integrated-web-platform-01.jpg",{"src":3135},"\u002Fwork\u002Fsustainable-brands-integrated-web-platform\u002Fsustainable-brands-integrated-web-platform-02.jpg",[745],{"src":3138,"alt":3073},"\u002Fwork\u002Fsustainable-brands-integrated-web-platform\u002Fintegrated-web-platform.jpg","An integrated web platform for Sustainable Brands, unifying conferences, content, and member services under one digital home for the global community of purpose-driven leaders.",[451],{},"\u002Fwork\u002Fsustainable-brands-integrated-web-platform",{"title":3073,"description":252},220,"work\u002Fsustainable-brands-integrated-web-platform",[3147,3148,3149],"Web Platform","Member Experience","Sustainability",2020,"kgOzuQs3fR6fzmye1kOBzHubUYW7ZYlbWJDZD7SH7yM",{"id":3153,"title":3154,"body":3155,"client":3130,"credits":318,"description":252,"extension":289,"featured":290,"gallery":3199,"geo":3218,"keyart":3219,"lede":3221,"mediaType":3222,"meta":3224,"navigation":301,"path":3225,"seo":3226,"sort":3227,"status":305,"stem":3228,"tags":3229,"vertical":1813,"year":2153,"yt_video":318,"__hash__":3230},"casestudies\u002Fwork\u002Fsustainable-brands-conference-tech-production.md","Conference Tech Production",{"type":8,"value":3156,"toc":3194},[3157,3159,3162,3165,3169,3175,3181,3187,3191],[38,3158,1824],{"id":1823},[16,3160,3161],{},"Sustainable Brands' annual flagship runs three to four days with thousands of attendees, multiple parallel tracks, twice-daily plenary stages, and a long tail of post-event content that gets cut, packaged, and shipped through the year. The work doesn't fail for lack of effort. It fails when one moving part doesn't line up with another: a session that wasn't on the registration form, a speaker the AV team didn't expect, a clip that nobody pulled in time to put up the next morning.",[16,3163,3164],{},"I produced the conference tech. I'm not the on-site vendor and I'm not the content lead. I'm the person making sure the path from registration form to live show to post-event video upload doesn't break at any of the handoffs.",[38,3166,3168],{"id":3167},"what-that-actually-means","What that actually means",[16,3170,3171,3174],{},[1841,3172,3173],{},"Pre-event."," Working with the SB content team to translate their program into something the production crew can actually execute. Sessions, rooms, speakers, AV needs, recording requirements, livestream destinations, captions, downstream content products. It all has to be agreed before the trucks roll in.",[16,3176,3177,3180],{},[1841,3178,3179],{},"On-site."," Working with the event production vendor (usually Freeman) alongside the SB content counterparts, to keep the program running. Not running cables (that's Freeman's job) and not directing speakers (that's the content team's). Producing the connection between the two: the show-call layer that knows what's planned, what's actually happening, and what to do when those diverge.",[16,3182,3183,3186],{},[1841,3184,3185],{},"Post-event."," Closing the loop on the video pipeline. Recordings come off-site, get cut, get reviewed by the content team, and ship to the right destinations. The flagship's evergreen content for the rest of the year depends on this part landing cleanly.",[38,3188,3190],{"id":3189},"why-i-include-it","Why I include it",[16,3192,3193],{},"A producer's job in this kind of role is often invisible. When it works, speakers are on stage on time, cameras are rolling, breakouts have what they need, and the videos go up post-event without a fire drill. When it doesn't, you quickly find out which of the three parties owns the failure. I include this work because, for several years, it didn't break. That's the bar.",{"title":252,"searchDepth":253,"depth":253,"links":3195},[3196,3197,3198],{"id":1823,"depth":253,"text":1824},{"id":3167,"depth":253,"text":3168},{"id":3189,"depth":253,"text":3190},[3200,3203,3206,3209,3212,3215],{"src":3201,"alt":3202},"\u002Fwork\u002Fsustainable-brands-conference-tech-production\u002Fsb-events-mainstage.jpg","Plenary Sessions",{"src":3204,"alt":3205},"\u002Fwork\u002Fsustainable-brands-conference-tech-production\u002Fsb-events-jumbotron-cobo.jpg","Motion Design on the Jumbotron at Huntington Place",{"src":3207,"alt":3208},"\u002Fwork\u002Fsustainable-brands-conference-tech-production\u002Fsb-events-videovillage.jpg","Plenary Video Village",{"src":3210,"alt":3211},"\u002Fwork\u002Fsustainable-brands-conference-tech-production\u002Fsb-events-livestream-plenary.jpg","Plenary livestream",{"src":3213,"alt":3214},"\u002Fwork\u002Fsustainable-brands-conference-tech-production\u002Fsb-events-livestream-workshops.jpg","Workshop livestreams",{"src":3216,"alt":3217},"\u002Fwork\u002Fsustainable-brands-conference-tech-production\u002Fsb-events-livestream-videovillage.jpg","Livestream video village",[745],{"src":3220,"alt":3154},"\u002Fwork\u002Fsustainable-brands-conference-tech-production\u002Fconference-tech-production.jpg","Conference tech producer for Sustainable Brands' annual flagship, coordinating the on-site AV vendor and SB's content team to take a session from registration form to live show to post-event upload.",[3223],"Event Technology",{},"\u002Fwork\u002Fsustainable-brands-conference-tech-production",{"title":3154,"description":252},230,"work\u002Fsustainable-brands-conference-tech-production",[2008,2010,3149],"Q4Sd8K7Zy4DupE6rVCXPkewR6toxc8l2coV3fzyvOeE",{"id":3232,"title":2214,"body":3233,"client":1886,"credits":318,"description":252,"extension":289,"featured":290,"gallery":3264,"geo":3265,"keyart":3266,"lede":3268,"mediaType":3269,"meta":3271,"navigation":301,"path":2213,"seo":3272,"sort":3273,"status":305,"stem":3274,"tags":3275,"vertical":1469,"year":1945,"yt_video":3277,"__hash__":3279},"casestudies\u002Fwork\u002Fwaterrising-institute-project-explainer-video.md",{"type":8,"value":3234,"toc":3259},[3235,3237,3244,3246,3249,3253,3256],[38,3236,14],{"id":13},[16,3238,3239,3240,3243],{},"A 3-to-4-minute animated explainer that introduces two things in one breath: the global gender and workforce inequality in the water industry, and the ",[30,3241,3242],{"href":1937},"WaterWoman Project","'s response to it. It lives on WaterRising's website and gets pulled out as the \"intro to us\" piece anytime someone needs an at-a-glance for what the org cares about and why.",[38,3245,3005],{"id":3004},[16,3247,3248],{},"Direct, produce, animate. The script was co-authored with the WaterRising team, who carry the policy and program substance, while I worked the visual story and timing. The result is short enough to play before a panel, long enough to actually establish the problem and the response.",[38,3250,3252],{"id":3251},"why-it-works","Why it works",[16,3254,3255],{},"The brief on this kind of piece is harder than it looks. The audience for an explainer can be anyone: a funder considering a grant, a partner deciding whether to attach their name, a journalist trying to get up to speed, a stakeholder already inside the topic. The piece has to land for all of them in three minutes without dumbing the policy down or losing the people new to it.",[16,3257,3258],{},"Animation does that better than live action for this brief. It compresses argument efficiently. It lets you visualize what a \"talent gap\" or a \"gender pipeline\" looks like at industry scale, without needing a documentary's runtime. And it's reusable. The same video that opened a board meeting in 2022 still opens a panel today.",{"title":252,"searchDepth":253,"depth":253,"links":3260},[3261,3262,3263],{"id":13,"depth":253,"text":14},{"id":3004,"depth":253,"text":3005},{"id":3251,"depth":253,"text":3252},[],[745],{"src":3267,"alt":2214},"\u002Fwork\u002Fwaterrising-institute-project-explainer-video\u002Fproject-explainer-video.jpg","An explainer video introducing WaterRising Institute's mission to global water-sector audiences. Short, animated, and built to anchor the org's pitch deck and conference openers.",[3270],"Video Production",{},{"title":2214,"description":252},240,"work\u002Fwaterrising-institute-project-explainer-video",[3276,2248,2250],"Animation",{"id":3278},"pIS5-G-Rxdg","QD4mnDphXn1fgOSO5HJhDjZ6TZfOmxxqtavs8hCkBH0",{"id":3281,"title":3282,"body":3283,"client":3331,"credits":318,"description":252,"extension":289,"featured":290,"gallery":3332,"geo":3333,"keyart":3334,"lede":3336,"mediaType":3337,"meta":3338,"navigation":301,"path":3339,"seo":3340,"sort":3341,"status":305,"stem":3342,"tags":3343,"vertical":1813,"year":1945,"yt_video":318,"__hash__":3346},"casestudies\u002Fwork\u002Ffashion-takes-action-wear-2022-virtual-event.md","WEAR2022 Virtual Event",{"type":8,"value":3284,"toc":3325},[3285,3289,3292,3296,3299,3303,3306,3309,3320,3322],[38,3286,3288],{"id":3287},"project-overview-and-context","Project Overview and Context",[16,3290,3291],{},"Due to the operating environment during the pandemic, the event was required to be delivered as a totally digital\u002Flive stream.",[38,3293,3295],{"id":3294},"about-fashion-takes-action","About \"Fashion Takes Action\"",[16,3297,3298],{},"Fashion Takes Action (FTA) is Canada's premier non-profit for sustainable fashion. Since 2007, FTA has worked to remove barriers to sustainability and engage the fashion industry around collaboration, innovation, and impact.",[38,3300,3302],{"id":3301},"execution-and-core-deliverables","Execution and Core Deliverables",[16,3304,3305],{},"As Technical Producer, I owned real-time delivery of the digital stream and show-called the live production.",[16,3307,3308],{},"The work pulled from:",[58,3310,3311,3314,3317],{},[61,3312,3313],{},"Filming, streaming, and producing live events.",[61,3315,3316],{},"Creative content production.",[61,3318,3319],{},"Post-production in Adobe After Effects, DaVinci Resolve, and Adobe Premiere Pro.",[38,3321,1703],{"id":1702},[16,3323,3324],{},"A fully digital event of this scale is a lot of moving parts to keep in time. We kept them in time. The role fits a longer history of directing and producing hybrid events and live streams for international conferences.",{"title":252,"searchDepth":253,"depth":253,"links":3326},[3327,3328,3329,3330],{"id":3287,"depth":253,"text":3288},{"id":3294,"depth":253,"text":3295},{"id":3301,"depth":253,"text":3302},{"id":1702,"depth":253,"text":1703},"Fashion Takes Action",[],[293],{"src":3335,"alt":3282},"\u002Fwork\u002Ffashion-takes-action-wear-2022-virtual-event\u002Fwear2022-virtual-event.jpg","Technical producer for WEAR2022, the flagship conference of Fashion Takes Action, Canada's leading sustainable-fashion non-profit. Delivered fully digital from pandemic lockdown.",[1935],{},"\u002Fwork\u002Ffashion-takes-action-wear-2022-virtual-event",{"title":3282,"description":252},250,"work\u002Ffashion-takes-action-wear-2022-virtual-event",[3344,3345,2008],"Post-Production","Live Production","U6vD5NIuosDfPCRLjZZ0a30rRdMk9Hjl0_zgdZJ7mH0",{"id":3348,"title":3349,"body":3350,"client":3413,"credits":3414,"description":252,"extension":289,"featured":290,"gallery":3417,"geo":3420,"keyart":3421,"lede":3422,"mediaType":3423,"meta":3425,"navigation":301,"path":2220,"seo":3426,"sort":3427,"status":305,"stem":3428,"tags":3429,"vertical":464,"year":3069,"yt_video":318,"__hash__":3432},"casestudies\u002Fwork\u002Fus-epa-water-tower-report-layout.md","Editorial Design & Layout",{"type":8,"value":3351,"toc":3408},[3352,3354,3367,3370,3372,3375,3395,3399,3402,3405],[38,3353,14],{"id":13},[16,3355,3356,3357,3360,3361,3366],{},"The report is ",[19,3358,3359],{},"A Guide for Recruiting and Retaining Talent in the Water Sector",", a research study conducted by ",[30,3362,3365],{"href":3363,"rel":3364},"https:\u002F\u002Ftheh2otower.org\u002F",[34],"The Water Tower"," under a grant from the U.S. Environmental Protection Agency. It surveys the talent crisis facing the water industry: an aging workforce, slow generational replacement, structural barriers to entry, and what the sector can do about it.",[16,3368,3369],{},"I designed and produced the publication.",[38,3371,3005],{"id":3004},[16,3373,3374],{},"The deliverable was a long-form, digital-only research report that needed to actually look like a publication, not a Word file exported to PDF. My scope:",[58,3376,3377,3383,3389],{},[61,3378,3379,3382],{},[1841,3380,3381],{},"Layout and typesetting."," A typographic system that supports a long read across data-heavy and narrative sections.",[61,3384,3385,3388],{},[1841,3386,3387],{},"Cover art"," and the design language that carries through the document.",[61,3390,3391,3394],{},[1841,3392,3393],{},"Infographics."," Visualizations of the data the report relies on, so readers don't have to parse a research table to understand what the study found.",[38,3396,3398],{"id":3397},"the-honest-version","The honest version",[16,3400,3401],{},"This was a grant deliverable. The Water Tower needed to produce a research artifact to fulfill the requirements of the EPA grant funding the study. For most recipients of similar grants, that means a serviceable PDF with an institutional cover and tables that nobody outside the immediate audience opens.",[16,3403,3404],{},"I treated it like a publication someone might actually want to read. Real cover art. Real typography. Infographics that did interpretive work, not just decoration. The result is a research report that holds up next to commercial editorial design, and that the authors and the funder can put in front of stakeholders without apology.",[16,3406,3407],{},"That's the difference design makes to grant-funded work, when somebody's willing to bring it.",{"title":252,"searchDepth":253,"depth":253,"links":3409},[3410,3411,3412],{"id":13,"depth":253,"text":14},{"id":3004,"depth":253,"text":3005},{"id":3397,"depth":253,"text":3398},"U.S. Environmental Protection Agency",[3415],{"sort":264,"role":3416,"value":3365,"uri":3363},"EPA Grantee & Financial Sponsor",[3418],{"src":3419},"\u002Fwork\u002Fus-epa-water-tower-report-layout\u002Feditorial-design-layout.jpg",[293],{"src":3419,"alt":3349},"Editorial design and layout for an EPA-funded research report, packaging dense policy work into a digital publication people will actually open and read.",[3424],"Editorial Design",{},{"title":3349,"description":252},260,"work\u002Fus-epa-water-tower-report-layout",[3430,3431],"Water Policy","Government","5vvNjwlMCI-Hup_Hr23JCOJJ5PFh294eYCw02qKY_uI",{"id":3434,"title":3435,"body":3436,"client":3130,"credits":318,"description":252,"extension":289,"featured":290,"gallery":3479,"geo":3483,"keyart":3484,"lede":3486,"mediaType":3487,"meta":3489,"navigation":301,"path":3490,"seo":3491,"sort":3492,"status":305,"stem":3493,"tags":3494,"vertical":1813,"year":3495,"yt_video":318,"__hash__":3496},"casestudies\u002Fwork\u002Fsustainable-brands-logitech-mevo-brand-activation.md","Logitech Mevo Brand Activation",{"type":8,"value":3437,"toc":3474},[3438,3440,3443,3447,3450,3453,3467,3471],[38,3439,1824],{"id":1823},[16,3441,3442],{},"Sustainable Brands' annual flagship runs three to four days with multiple parallel sessions, breakouts, and plenary stages. Streaming all of it well requires a lot of cameras in a lot of places. Logitech sponsored the camera fleet, and the activation needed to do two things at once: power the conference's streaming operation, and tell the Logitech sustainability story to a room full of people who would notice if the brand work was lazy.",[38,3444,3446],{"id":3445},"the-play","The play",[16,3448,3449],{},"Logitech Mevo is a small, all-in-one livestreaming camera that pairs well with a multi-stream conference rig. We used the kit Logitech provided to run the full streaming operation. At the busiest moments, six Mevos were running concurrently, each pulling a session from a different room into the central feed.",[16,3451,3452],{},"The activation itself was the in-room visual presentation that surrounded each camera. We worked with the Logitech brand team to design something that did two jobs:",[58,3454,3455,3461],{},[61,3456,3457,3460],{},[1841,3458,3459],{},"Physical: protect the cameras from a busy event environment."," Conferences are kinetic. Attendees move through tight rooms, AV crews swap cables, gear gets bumped. The presentation gave each Mevo a physical housing that kept it stable on its perch and out of the path of accidental contact.",[61,3462,3463,3466],{},[1841,3464,3465],{},"Brand: tell the sustainability story."," The same housing carried Logitech's connection to sustainability as a visible part of the room, not as a separate booth or banner. The audience that saw the camera was also seeing the partnership.",[38,3468,3470],{"id":3469},"why-this-works","Why this works",[16,3472,3473],{},"A good brand activation does the job it was paid to do (here, run a working camera fleet) and uses the same physical real estate to say something the brand wants said. We got both, and the audience experienced them as the same object.",{"title":252,"searchDepth":253,"depth":253,"links":3475},[3476,3477,3478],{"id":1823,"depth":253,"text":1824},{"id":3445,"depth":253,"text":3446},{"id":3469,"depth":253,"text":3470},[3480],{"src":3481,"alt":3482},"\u002Fwork\u002Fsustainable-brands-logitech-mevo-brand-activation\u002Fmevo-activation-print.jpg","In-room activation print",[293],{"src":3485,"alt":3435},"\u002Fwork\u002Fsustainable-brands-logitech-mevo-brand-activation\u002Flogitech-mevo-brand-activation.jpg","A Logitech Mevo brand activation produced for Sustainable Brands' flagship conference, putting the prosumer livestreaming kit in front of the creators most likely to use it.",[3488],"Brand Activation",{},"\u002Fwork\u002Fsustainable-brands-logitech-mevo-brand-activation",{"title":3435,"description":252},270,"work\u002Fsustainable-brands-logitech-mevo-brand-activation",[3488,3345,3149],2021,"Y5y2_hEQ0XqCMirbkEh3rjkL1Nzq2nqXZJkGVHXP5UY",{"id":3498,"title":3499,"body":3500,"client":3545,"credits":318,"description":252,"extension":289,"featured":290,"gallery":3546,"geo":3553,"keyart":3554,"lede":3556,"mediaType":3557,"meta":3558,"navigation":301,"path":3559,"seo":3560,"sort":3561,"status":305,"stem":3562,"tags":3563,"vertical":1382,"year":3069,"yt_video":318,"__hash__":3567},"casestudies\u002Fwork\u002Flaine-bachman-artist-website.md","Dynamic Artist Website",{"type":8,"value":3501,"toc":3540},[3502,3506,3509,3513,3516,3530,3533,3537],[38,3503,3505],{"id":3504},"goal","Goal",[16,3507,3508],{},"Build painter Laine Bachman a web presence that gives her work room to breathe and matches the quality of the paintings themselves.",[38,3510,3512],{"id":3511},"technical-execution","Technical execution",[16,3514,3515],{},"I built the site end-to-end as the full-stack developer. The stack:",[58,3517,3518,3521,3524,3527],{},[61,3519,3520],{},"Front-end framework: Nuxt 4 (building on prior Nuxt 3 JAM Stack work)",[61,3522,3523],{},"Styling: TailwindCSS",[61,3525,3526],{},"Language: TypeScript",[61,3528,3529],{},"Headless CMS: Directus",[16,3531,3532],{},"The structure lets the paintings do the talking and keeps the chrome out of the way.",[38,3534,3536],{"id":3535},"outcome","Outcome",[16,3538,3539],{},"The site works in concert with her gallery representation in Asheville, NC — a professional online presence that sits alongside the business and marketing the gallery runs. The paintings get a stage; the artist gets a place that's hers.",{"title":252,"searchDepth":253,"depth":253,"links":3541},[3542,3543,3544],{"id":3504,"depth":253,"text":3505},{"id":3511,"depth":253,"text":3512},{"id":3535,"depth":253,"text":3536},"Laine Bachman",[3547,3550],{"src":3548,"alt":3549},"\u002Fwork\u002Flaine-bachman-artist-website\u002Flaine-bachman-bio.jpg","Bio page",{"src":3551,"alt":3552},"\u002Fwork\u002Flaine-bachman-artist-website\u002Flaine-bachman-news.jpg","News page",[293],{"src":3555,"alt":3499},"\u002Fwork\u002Flaine-bachman-artist-website\u002Fdynamic-artist-website.jpg","An artist website for painter Laine Bachman, designed to work alongside her gallery in Asheville and give her paintings the room they need online.",[1458],{},"\u002Fwork\u002Flaine-bachman-artist-website",{"title":3499,"description":252},280,"work\u002Flaine-bachman-artist-website",[3564,3565,3566,457,458],"Visual Art","Asheville","Headless CMS","H6jtqKqE9Rm50_tkhaUbWz1cbzuDOPVg5uy1EEfidCg",{"id":3569,"title":3570,"body":3571,"client":728,"credits":3637,"description":252,"extension":289,"featured":290,"gallery":3640,"geo":3641,"keyart":3642,"lede":3644,"mediaType":3645,"meta":3647,"navigation":301,"path":3648,"seo":3649,"sort":3650,"status":305,"stem":3651,"tags":3652,"vertical":2364,"year":465,"yt_video":318,"__hash__":3656},"casestudies\u002Fwork\u002Fdevelopment-google-drive-folder-link.md","Google Drive Folder Link",{"type":8,"value":3572,"toc":3632},[3573,3575,3578,3582,3621,3623],[38,3574,328],{"id":327},[16,3576,3577],{},"Google Drive Folder Link bridges the gap between Obsidian's note-first knowledge graph and the reality that most teams' working files still live in Google Drive. Rather than copy-pasting Drive URLs into notes (and losing them when folders get reorganized), the plugin associates a Drive folder with a note via a fuzzy-search picker and stores the association in the note's frontmatter, where it stays durable, searchable, and portable across devices.",[38,3579,3581],{"id":3580},"how-it-works","How it works",[58,3583,3584,3590,3596,3609,3615],{},[61,3585,3586,3589],{},[1841,3587,3588],{},"In-memory tree cache."," The plugin walks the configured root folders once and caches the tree in memory, making subsequent fuzzy searches feel instant. Much faster than per-keystroke Drive API calls would allow.",[61,3591,3592,3595],{},[1841,3593,3594],{},"My Drive + Shared Drives."," Both are searchable from a single picker.",[61,3597,3598,3601,3602,948,3605,3608],{},[1841,3599,3600],{},"Frontmatter as source of truth."," The Drive folder ID and display name are stored in the note's properties (",[795,3603,3604],{},"googleDriveFolderId",[795,3606,3607],{},"googleDriveFolderName","), so the link survives note moves, vault syncs, and exports.",[61,3610,3611,3614],{},[1841,3612,3613],{},"Properties-pane integration."," A clickable link appears in the Properties pane to open the folder in the browser. Command-palette and right-click menu entries are also wired up.",[61,3616,3617,3620],{},[1841,3618,3619],{},"User-owned credentials."," Each user creates their own Google Cloud OAuth credentials, so the plugin never funnels traffic through a shared backend or asks users to trust a third-party token broker.",[38,3622,415],{"id":414},[58,3624,3625],{},[61,3626,1298,3627],{},[30,3628,3631],{"href":3629,"rel":3630},"https:\u002F\u002Fgithub.com\u002Fandrewmarconi\u002FGoogleDriveFolderLink",[34],"github.com\u002Fandrewmarconi\u002FGoogleDriveFolderLink",{"title":252,"searchDepth":253,"depth":253,"links":3633},[3634,3635,3636],{"id":327,"depth":253,"text":328},{"id":3580,"depth":253,"text":3581},{"id":414,"depth":253,"text":415},[3638,3639],{"sort":437,"role":731,"value":285,"uri":2340},{"sort":264,"role":739,"value":3631,"uri":3629},[],[745],{"src":3643,"alt":3570},"\u002Fwork\u002Fdevelopment-google-drive-folder-link\u002Fdevelopment-google-drive-folder-link.jpg","An Obsidian plugin that attaches a Google Drive folder to any note via fuzzy search, with one-click access to the linked folder from the note's properties pane.",[3646],"Obsidian Plugin",{},"\u002Fwork\u002Fdevelopment-google-drive-folder-link",{"title":3570,"description":252},290,"work\u002Fdevelopment-google-drive-folder-link",[459,3653,3654,3655,759],"Obsidian","Google Drive API","OAuth","skIjt5dqj-2zJGxNrzdHXHb4I6JElUx8ubkBseIC7io"]