- what gets written
- what the numbers show
- the decision in between
- that was the plan all along
Marketing 01
Ideas that
need to
work.
Campaigns, content, performance, CRM and the strategy that decides what goes live, and why.
See the projects →Code 02
Solutions that
need to make
sense.
Programming, automation, data analysis and visualization to turn problems into solutions.
See the projects →✳︎ Your pick: marketing, programming or both :)
Cases
-
01Programming
Electoral gamification ERP
A system built from scratch that replaced ten spreadsheets with weekly missions, scoring and a mobilization ranking.
Fictional data: names and phone numbers were replaced to protect the people in the campaign.
200active canvassers10spreadsheets replaced by a single system1weekly report, generated on its ownContext
During the 2026 elections, I built from scratch a gamification system that supported a campaign's digital mobilization strategy. The goal was to engage canvassers in growing the candidate's support base through weekly missions, scoring and a ranking. Before the system, the information was scattered across several spreadsheets. The platform centralized everything: expected votes, missions, each canvasser's performance and geographic distribution.
My responsibilities
- Mapping: I surveyed the processes and the data in the existing spreadsheets and defined with the coordination team what the system needed to deliver.
- Backend: I developed the data structure, the missions and scoring logic, authentication and the system's endpoints.
- Dashboards and reports: I built the tracking dashboards and the automated weekly report.
Backend
I developed the backend from scratch in Python (FastAPI), with a PostgreSQL database. First, I migrated and structured the spreadsheet data: canvassers, regions, expected votes and history.
Then, together with the campaign's digital mobilizer, I designed the gamification logic. It included assigning missions, such as growing WhatsApp groups and organically sharing campaign content, validating completed missions and automatically calculating the weekly score that fed the ranking. The system had authentication with different access levels for the coordination team and for canvassers.
Dashboards
I built dashboards for each user profile. The coordination team tracked expected votes by region, the weekly progress of missions and the individual and collective performance of the team. Canvassers saw their missions, their score and their position in the ranking, which encouraged continuous engagement. At the end of each week, the system automatically generated a custom report with the ranking, the geographic distribution of expected votes and the period's main indicators.
Technical decisions
- Data standardization and integrity: the source spreadsheets had people, cities and regions spelled in different ways. I created standardization rules (accents, casing and a single spelling per municipality) and modeled the database with unique identifiers and uniqueness constraints by phone number. This avoided duplicate records and ensured scores and expected votes were never counted twice.
- Extensible missions logic: I structured the scoring rules to be configurable. The coordination team could create missions and automatic rules throughout the campaign without changing code, and the system kept up with the strategy as it evolved.
- Google Contacts integration: I connected the system to the People API via OAuth. A daily sync showed how many contacts the candidate's account had, giving the coordination team a direct indicator of how the relationship base was growing.
Problem
Without consolidated visibility, the coordination team could not track canvasser performance, estimate votes by region or keep the team continuously engaged throughout the campaign.
-
02Programming
Campaign management ERP
A system that brings every campaign of the agency into one place: Kanban, schedule, team, notes and a password vault.
Fictional data: campaigns, candidates and team members were made up for the screenshots.
6modules in a single system52API endpoints4access profiles with their own permissionsContext
A political communication agency manages several campaigns at the same time, with different teams, deadlines, stages and accounts. Since that information was spread across spreadsheets, messages and separate tools, I developed from scratch a system to centralize and track the whole operation.
My responsibilities
- Mapping and architecture: I turned the campaigns' workflow into the system's structure and rules.
- Backend: I modeled the database and developed the API, authentication, access levels, history and credentials vault.
- Frontend: I developed the campaigns, Kanban, schedule, teams and notes interfaces.
- Infrastructure: I deployed the application with Docker, proxy, TLS and automated backups.
Development
The backend was built with Python, FastAPI and PostgreSQL, with each campaign gathering activities, team, files, notes and credentials. The system includes role-based access control, change history and protected credential storage.
On the frontend, I created a Kanban with filters and drag-and-drop, plus an overview of the campaigns, schedule, team workload and note organization. I first sketched it in Figma and then used Claude Code to refine it.
Technical decisions
- Traceability: relevant changes are logged, making it possible to follow each campaign's history.
- Centralization: operational information and access are gathered in a single environment, with specific permissions.
- Simple operation: Docker Compose organizes the application, database, proxy and backups, making deployment and recovery easier.
Problem
The agency needed to replace scattered information with a centralized view of the operation, making it possible to spot delays, track team workload and reach each campaign's information faster.
-
03Programming
Custom photo filters
Tailor-made pages where the voter uploads a photo, gets the image back with the candidate's frame and lands in a conversation.
+10kphotos generated1config per client, no code rewrites2delivery flows: iOS and AndroidContext
During the 2026 elections, I created custom landing pages for candidates together with a UI/UX designer. On them, the voter uploaded a photo and received the image back with the candidate's frame (a PNG filter), ready to share.
What set it apart
Unlike generic solutions, each page was tailor-made for the client. After downloading the photo, the voter was redirected to a WhatsApp conversation, which turned organic engagement into direct contact with the campaign.
Backend
I built the backend responsible for generating and delivering the images. Each client had its own configuration: PNG frame, colors, WhatsApp number and redirect message, which made it possible to launch a new page without rewriting code.
The photo was composed with the filter in the browser, via the Canvas API, adjusting the framing and exporting the final image in high quality.
Every use was logged in the database and replicated via webhook to a Google Sheets spreadsheet. That way the candidate and the team, with no access to the database, followed engagement in real time: number of photos generated, device, date and time, and contact details consented to under LGPD.
Technical challenges
The page was optimized for desktop and mobile, with a different flow for each system:
- iPhone (iOS/Safari): the image is delivered through the Web Share API
(
navigator.share), because Safari restricts direct downloads and this path lets the user save or share the photo natively. - Android: the final image is converted into a Blob file and downloaded automatically through a download link, with no extra steps for the user.
Problem
Campaign filters are usually made with generic tools that fail on iPhone and end at the photo share, without the campaign knowing who took part. The challenge was to create a filter that worked on any device and turned every participation into a measurable contact, with follow-up via WhatsApp.
-
04Programming
LPs · Pedro Sta Cannabis and Paulinha
Two campaign landing pages: the petition that takes each supporter into a WhatsApp conversation, and the participation page that sends each lead straight to the team's spreadsheet.
~13,000signatures collected30days liveContext
Two landing pages for 2026 electoral campaigns, with the same logic: the page converts, and the data goes straight to where the team works. For Pedro Santa, I developed with a UI/UX designer a landing page to collect signatures for a manifesto. After signing, the supporter was automatically taken into a WhatsApp conversation, which turned every signature into an active campaign contact.
My responsibilities
- Strategy and copywriting: I wrote the brief for the designer and all of the page copy, focused on conversion.
- Backend and data integration: I developed the API that recorded the signatures, fed the live counter and synced the data with Google Sheets.
- Form: I developed the signature form and the automatic redirect to the conversation.
Backend
I built the page's entire backend. The form sent the data to an API I developed in Python/FastAPI. The API validated the fields (e-mail and phone format, and blocking duplicate signatures) and saved each signature in a PostgreSQL database.
At the same time, a webhook replicated the data in real time to a Google Sheets spreadsheet. That way the campaign team, which had neither access to nor familiarity with the database, followed the signatures in a simple, up-to-date way. The page's live counter queried an API endpoint with the updated total.
After confirmation, the backend redirected the supporter to WhatsApp with a pre-filled message, starting the conversation automatically.
Paulinha's LP
The second page is Team Paulinha's participation page: the supporter picks how they want to help (physical material, digital material, becoming a supporter or sharing on social media) and fills in name, WhatsApp, e-mail and city (the list of municipalities comes from the IBGE API, filtered by state). There is no database here: a FastAPI API validates and normalizes the fields and sends each lead via webhook to a Google spreadsheet, through Apps Script; if the webhook fails, the lead goes to a local backup and nothing is lost. Everything comes up with a single
docker compose up: nginx serves the page and proxies the API.Problem
The campaign needed a fast way to capture supporters and take them straight into a relationship channel, without depending on manual spreadsheets or losing leads between the signature and the first contact.
-
05Programming
Teacher Mental Health Report · SINTE/UFSC
Technical report of the 5th Teacher Health Survey of Santa Catarina's state school system: 2,597 responses, a time series since 2020 and public policy recommendations, in a partnership between the SINTE union and two UFSC research centers.
Pages from the published report. The data is aggregated and anonymous: the survey does not record who responds.
2,597responses from state school teachers63questions in six sections5editions compared, from 2020 to 2024Context
Since 2020, SINTE (the Santa Catarina Education Workers' Union) has run an annual survey on the health of those who teach in the state school system. In the fifth edition, the analysis started being done in partnership with two UFSC research centers, NIPP and NECIP, within an outreach project coordinated by Prof. Julian Borba. The result is this technical report: a portrait of teachers' working conditions, physical health and, above all, mental health, compared with the time series of the four previous editions.
My responsibilities
- Literature review: a survey of what research on teacher health already shows about sick leave, overload, common mental disorders and gender differences, which opens the report.
- Data analysis: tabulating and reading the 2024 results, section by section, and comparing them with the 2020 to 2023 editions to identify trends.
- Group breakdowns: analysis of differences in perception by sex, color/race, type of contract (tenured or temporary) and region of the state.
- Writing: writing and revising parts of the report, from the analytical text to the chart captions.
Method
The questionnaire was revised from the previous edition and grew from 50 to 63 questions, organized in six sections: profile, perceptions of work, health habits and perceptions, sick leave, chronic illnesses and mental health. It was applied online, through the union's channels, between October and December 2024, with no identification recorded. Since the sample is a convenience sample, the data was post-stratified by sex, region, age group and color/race based on the School Census, so that the results would approximate the real set of teachers in the system.
What the data shows
- Mental health at the center: 28% of teachers reported suicidal ideation in recent years. Tiredness and physical and emotional exhaustion are pointed out by 83% as the main factor of illness, followed by tensions with students (68%) and with school management (37%).
- Working while sick: the time series tracks, year by year, who had a health problem that kept them away from work, who worked while sick and who uses continuous or controlled medication.
- Inequalities: the breakdowns by sex, race and type of contract show that overload and insecurity are not evenly distributed; temporary teachers and women appear more exposed.
- Recommendations: the report closes with public policy proposals: stabilizing employment ties, continuing education with universities, affirmative action, occupational health programs and attention to workplace harassment in schools.
Problem
An opt-in survey, answered by whoever wants to answer, tends not to represent the whole category, and a union needs numbers that hold up when they are brought to the negotiating table. The challenge was to turn five years of questionnaires into a comparable, defensible diagnosis, with an explicit method and a clear read for non-researchers.
-
06Marketing
Mumuzinho & Banco BV
Hero film for the vehicle-secured loan: a garage that turns into three worlds while Mumuzinho sings "car in the garage, cash in hand".
Hero film, 16:9, 19 s · final version delivered to the client.
3sets built in the same garage19 sof film, with a jingle sung by Mumuzinho1idea taken from pitch to setContext
Banco BV needed to present its vehicle-secured loan, "car in the garage, cash in hand", in a short, light, singable film, with Mumuzinho as the lead. The central idea was the garage: the car would stay put and the garage would transform as the money arrives. I worked on the project from concept to set, in pre-production and as assistant director.
My responsibilities
- Concept and references: I gathered the visual references for each set: the family home, the renovation workshop and the futuristic garage.
- Client pitch: I took part in building the proposal presentation to the client, defending the concept, the tone and the sequence of sets.
- Assistant directing: on set, I supported cast blocking and the changeover from one set to the next.
Concept
The film starts from a simple question: what changes when the money comes in without having to sell the car? The answer is in the garage. It starts as a family's home, goes through a renovation and ends as a futuristic garage. The car stays the same; what changes around it shows what the credit made possible.
Production
The three sets were built in the same garage. Pre-production planned each set change to keep Mumuzinho's blocking and rhythm. The transitions use the camera movement to connect one set to the next.
Creative decisions
- One set, three worlds: the same garage transforms throughout the film, reinforcing the idea that the car stays while life changes.
- The car always present: it stays in frame to show it remains with the owner.
- Details that tell the story: a cake, bricks and an astronaut dog help show what the credit made possible without having to explain it.
Problem
A vehicle-secured loan can raise an immediate doubt: "will I lose my car?". The challenge was to show, simply, that the car stays with the owner while the money is released.
-
07Marketing
Copy for Boticário, PepsiCo & Corteva
Hired as a freelancer by DMC, an events and incentive agency, to write the card copy for three campaigns (invitations, kits and announcements), thinking about the experience of whoever receives each piece.
Cards blurred for confidentiality: you can see the structure of each piece, not the text. The lines quoted below are the only ones reproduced.
3brands, three different tones of voice9cards across invitations, kits and announcements1events agency as the clientContext
DMC Incentives & Corporate Events creates incentive campaigns, corporate trips and events for major brands. In each campaign, participants receive a sequence of pieces: the invitation, the reminders, the cards that come with the kits, the logistics notices. I was hired by the agency, as a freelancer, to write the copy for those cards on three projects: PepsiCo's incentive trip to the World Cup, the launch of FalaRep at Corteva, and Me Leva GB, for Grupo Boticário.
My responsibilities
- Card copy: I wrote the text for every piece: headlines, opening lines, body and calls to action.
- Tone of voice per brand: I adapted the writing to each client and to each moment of the campaign: recognition at PepsiCo, service clarity at Corteva, pause and celebration at Boticário.
- The recipient's experience: I thought through each card from the person's situation when it arrives: what they need to know, what they need to feel and what they need to do next.
Approach
A campaign card is not an ad: whoever receives it has already been chosen, is already in. The copy first needs to make the person feel recognized. So each piece opens with a line about the moment, not the event ("Some experiences are reserved for a few", "Can you feel it?"), and leaves the logistics, dates, documents, deadlines, to a separate block, shorter and more direct. On the kit cards, the object itself becomes copy: flip-flops, a lanyard and a cup become "feet on the ground, phone close by, drink always cold".
Copy decisions
- One opening line per card: each piece has a line that can be read on its own and still makes sense. It's what the person will remember.
- Service without a warning tone: at Corteva, the commissions channel had to be explained without sounding like bureaucracy. The promise was reduced to one line, "everything about commissions, in one place", repeated from teaser to reminder.
- Logistics in its own block: what is mandatory (documents, deadlines, dress code) is kept apart from what is celebration, so one doesn't contaminate the other.
- A sequence, not loose pieces: teaser, launch and reminder were written as a conversation in three beats, with the same vocabulary, so the second read confirms the first.
Problem
Incentive campaigns mix two kinds of text that can clash: celebration ("you earned this") and instruction ("send your passport by Wednesday"). When both come together, the instruction takes over and the card turns into a notice. The challenge was to keep the experience at the center without losing any mandatory information.
-
08Marketing
Farol Congress 2023 · Instituto Farol
Launch teaser for the congress on autism and child development: 45 seconds to open in-person and online registration.
Horizontal teaser, 45 s · version for the website, YouTube and direct sending.
45 sof film, from the problem to the invitation2congress days, October 28 and 294pillars in the script: attention, care, learning, innovationContext
For the Instituto Farol Congress 2023, focused on autism and child development, the challenge was to create a short, welcoming teaser that presented the event and steered the audience toward registration.
My responsibilities
- Script and concept: I developed the script presented to the client and the teaser's narrative, connecting inclusion, care, learning and innovation.
- Art direction: I adapted the congress's visual identity for video, using colors, graphic elements and typography in motion.
Concept
The script starts from the routine of families and professionals before presenting the congress. The narrative moves from attention, care and learning to innovation, positioning the event as the place to keep up with advances in the field.
Production
The teaser combines stock footage with motion design based on the event's identity. Mosaics, patterns, typography and captions structure the rhythm and let the message be understood even without sound.
Creative decisions
- Words as scenes: the script's central terms take the visual lead.
- Identity in motion: the brand's graphic elements drive transitions and rhythm.
- A single call: the film ends by sending the audience to the registration site, without competing with secondary information.
Problem
Presenting the congress in a few seconds to families, health professionals and educators, while keeping the communication welcoming, clear and far from the conventional institutional tone.
About me
My story
A multidisciplinary professional: I work with strategy, marketing, data and technology.
I started in audiovisual as a freelance advertising scriptwriter and spent four years at a digital marketing agency working with paid and organic traffic and SEO. During my degree in Political Science, I dove into data analysis and programming in Python and R, skills I now apply to building automations, systems and data pipelines.
Over my career I've contributed to advertising campaigns, digital marketing strategies, landing pages, gamification systems and mobilization projects for electoral campaigns, often taking on strategy, copywriting and development within the same project.
I believe that understanding every stage of a project, from conception to delivery, lets me make better-grounded decisions, talk more easily with teams from different specialties and anticipate challenges, even when my own work is focused on a single area.
That is the outlook I'm building a path toward project leadership with.
swipe sideways
-
Working with Yara was a very positive experience. She was always available to meet the agency's demands quickly, kept a professional attitude and met every deadline we agreed on.
Marina Z. · Creative Traffic ManagerDMC Inteligência em Eventos · freelance copywriter
Worked with me and want to leave a comment? send me two lines →
Let's
talk?
Got a project, an idea, or just want to chat? Reach out.
Let's talk →



































