Portfolio site: https://plato-portfolio.pages.dev
Revised 2026-08-11. Source: marketing/portfolio-site/ — rebuild with make-showreel.sh, then build.sh.
Upwork's own docs say you can upload a video file to a portfolio item: max 100 MB, and the file plays inline. (Their two support articles disagree on whether it is one or two videos per project — the same conflict as the character limits.) So the premise that only images upload and video must come from YouTube/Vimeo is wrong.
Our files are far under the cap:
| asset | size | use |
|---|---|---|
presentation.mp4 |
24.4 MB | the tile video — five projects played complete, 2 min 10 s |
showreel.mp4 |
14.0 MB | 49-second fast cut, if a shorter tile is wanted |
| any single ad | 6–16 MB | per-item tile |
So the upload is: attach the MP4 + paste the link to that item's page. No third-party account, nothing to maintain, and the video plays inside Upwork exactly as a YouTube embed would.
Where YouTube is still worth doing: Project Catalog galleries, and anywhere you want one reusable URL rather than re-uploading per item. If you go that route, unlisted is fine and the same file works. It is an optimisation, not a prerequisite — and it is a manual account action, not something this session can do.
| file | length | shape | where |
|---|---|---|---|
presentation.mp4 |
2:10 | Each ad played complete, behind a title card naming the project, the format and the constraint. | Site hero · Upwork tile |
showreel.mp4 |
0:49 | Hook + end card only, lower-third labels. | Collapsed under the hero, for anyone who wants the fast version |
The presentation reel is the better fit for this buyer. These are twenty-second ads, and the question a client is actually asking is "can you make a good twenty-second ad?" A montage of fragments demonstrates editing; a complete ad answers the question. At two minutes the title cards stop reading as padding and start doing the work of a presentation.
The long-form item is handled differently, because nobody will sit through a six-minute explainer: it shows an excerpt of the source — widescreen, letterboxed, plainly raw — then an excerpt of one finished vertical, each labelled on screen. About twenty-five seconds for the before and after of the service.
Both sides come from the "where the salt hides" material. Two things were wrong in the first attempt and are worth remembering for the next one of these: the source excerpt sat inside the range that the paired short was cut from, so the before and after were the same seconds of the same picture; and that picture was a near-static graphic with nothing happening in it. A frame-difference scan over the whole source confirmed it is a generated slide explainer with very little motion anywhere, so the fix was to find the liveliest stretch rather than assume any excerpt would do.
The extracted side now starts at its written hook headline, which does not exist in the source. That is the point: the contrast is not just 16:9 versus 9:16, it is a bare panel against a cut with its own headline, its own opening beat, burned-in captions and a brand mark. The added value is visible rather than asserted.
Your four calls were implemented as written. Six things changed after that; these are what to look at. Everything else is as you last saw it.
1. Item 5 was materially wrong and is the least-reviewed page. It said "two decisions" and showed the faceless cut and the vendor cut — but omitted the version that actually shipped. Two rejected options and no winner. It is now "Three approaches to the same ad" with all three labelled and the shipped one marked. Newest copy on the site; please read it first.
2. The showreel was four openings with every CTA cut off. I took a single 12-second slice from the head of each piece, which dropped every end card. Each piece is now hook + its own CTA, so all four resolve. Still 49 s. The CTAs turned out to be the strongest content in the reel — each carries its compliance line ("not affiliated with USCIS", "Estimates may vary · not medical advice", "21+ enjoy responsibly"). Lower-third labels identify each piece; I argued against interstitial title cards on a reel this short, but that is a taste call worth your second opinion.
3. The footage model was stated wrongly, twice — this is the one with commercial risk. Copy said "live action", then "performance footage". Both imply a shoot. Everything is AI-generated; no project uses filmed footage of real people. Copy now says so and leads with it as an advantage — no casting, no talent releases, no location cost, recast in an afternoon.
The judgement call I would most like challenged: is leading with "AI-generated performers" a differentiator, or does it invite "then why am I paying a person?" I think the honest version wins and the alternative is a claim that collapses the first time a client asks about the shoot — but you know the buyer better than I do.
4. Item 2's brief line was rewritten to your wording — "We don't film real families in vulnerable moments — every scene is generated." Replaces the defensive-sounding budget/duty-of-care phrasing.
5. Deliverable metrics are in — your note. Every result line now carries checkable facts instead of soft statements. Still no invented performance numbers; none exist.
6. Poster frames are now chosen, not auto-grabbed, with dedicated card crops. The long-form thumbnails previously rendered as near-white blank tiles, and the flagship card cropped the face at the mouth.
Rights are closed. Ella audio is royalty-free, the picture is fully generated, and it does not use Greg's mother despite the script having been drafted that way. No talent releases, consent decisions or location clearances outstanding on anything shown.
Reviewed by Fable. All four judgement calls confirmed; the resulting edits are live.
Copy length — keep it short. 93–128 words with expandable detail is right: video clients watch, they don't read. The craft detail behind a click serves the rare technical buyer. Do not inflate the surface.
Missing metrics — substitute deliverable metrics. Refusing to invent performance numbers is correct, but soft result lines were leaving value on the table. Every result line now carries verifiable deliverable facts — "seven 1080×1920 verticals from one 354-second source, no new shooting", "90-of-90 word-level accuracy check before picture lock", "a 25-second master published to a live channel". These answer the same client question view-counts would (will I get something real?) and every one is checkable.
Ordering — lead with the strongest watchable ad. Slot 1 must match the category buyers browse for, so Citizen Coach leads. Long-form last on the site is fine — but on Upwork it is its own portfolio item and its own Project Catalog offer, because its buyer (podcasters, coaches, YouTubers) is a different person who searches differently. Ordering stops mattering once each is a separate item.
Process transparency — exactly one item. The method case study differentiates: it shows someone who makes decisions rather than renders. Keep it in one place deliberately; do not spread alternates across the other project pages.
noindex are not gates. pages.dev is fine for portfolio links.
Keep noindex for now; revisit if a domain is attached.Everything is AI-generated. No filmed footage of real people appears in any project, for any client, anywhere in this portfolio. The Ella film in particular does not use Greg's mother, despite the shooting script having been drafted that way — the finished picture is fully generated. Ella's audio is royalty-free.
That closes the rights question: no talent releases, no consent decisions, no location clearances outstanding on anything shown.
It also corrected a claim. Public copy previously said "live action", then "performance footage" — both wrong. Copy now states plainly that performers and scenes are AI-generated while the product shots are real, and treats the generation model as an advantage rather than a disclaimer: no shoot, no talent releases, no location cost, and a persona can be recast in an afternoon instead of a reshoot.
The distinction to keep straight when writing about this work: generated people, real interface. "Real in-app footage" remains accurate and is the proof beat of every ad.
Six Upwork portfolio items, each linking to its own page — not to an anchor on a shared page, so a client clicking through lands on a clean project rather than mid-scroll inside someone else's. The site root is an overview: showreel first, then six cards.
| # | Upwork item | Links to |
|---|---|---|
| 1 | Citizen Coach — AI Officer Practice | /citizen-coach/ |
| 2 | Ella AI Care — brand demo film | /brand-film/ |
| 3 | BarCraft AI — Party Panic | /barcraft/ |
| 4 | SodiumWise — Hidden Salt | /sodiumwise/ |
| 5 | Three approaches to the same ad | /iteration/ |
| 6 | Long-form repurposing | /repurposing/ |
Also upload the MP4 to the Upwork item itself. Upwork renders an inline player and a meaningful share of clients never click out.
Before applying to a specific job, reorder so the most relevant item sits first — that position carries most of the attention.
No rejected takes. Citizen Coach v4–v8, both spoken-practice cuts and SodiumWise v1/v2 are not published. A client scanning quickly judges you on the weakest thing shown.
No pricing anywhere in public copy. build.sh greps generated HTML for $-figures, "per short", "rate card" and "generation cost", and fails the build if any appear.
No unsupported claims. An earlier draft said "ten versions of the same twenty seconds" while showing two. Claiming ten and showing two reads as concealment; the page now claims only what it demonstrates.
Masters live on the Drive at My Drive/UGC Portfolio/, byte-identical on /Volumes/External T1/ugc-portfolio and letta:/mnt/archive/ella-backups/ugc-portfolio.
Title: 20-Second App Ad — Persona Hook + Real In-App Footage (Regulated Product)
Link: https://plato-portfolio.pages.dev/citizen-coach/
Upload: 01-Best-Work/Citizen Coach - AI Officer Practice (hybrid persona) 20s.mp4
Description:
The brief. Sell a US citizenship-interview practice app to nervous first-time applicants — a high-anxiety purchase for an audience with good reason to distrust anything that looks like an immigration shortcut.
The approach. Three beats, twenty seconds. A lip-synced persona opens, real in-app footage proves the product works, and the CTA lands on the actual home screen instead of a title card. The persona was cast as an earnest applicant rather than a polished influencer — the ad has to feel like someone in the same position as the viewer, not someone selling to them.
The result. Delivered as a 20-second 1080×1920 master for a live App Store product. Three beats, frame-accurate captions timed from the measured voiceover, and compliance language carried in both voiceover and end card — with no outcome or approval-rate claim anywhere in the cut.
Skills: Video Editing · Video Production · Social Media Video · Video Advertising · Generative AI · Short Form Video · App Marketing
Title: 58-Second Brand Demo Film — Human-Cadence Narration + Word-Accuracy Gate
Link: https://plato-portfolio.pages.dev/brand-film/
Upload: 07-Brand-Demo-Film/ella-demo-master-16x9-local.mp4
Description:
The brief. A landing-page film for an AI companion worn by elderly users and monitored by their families. Two audiences, one runtime, and a subject where anything that sounds synthetic or salesy destroys the trust the product depends on. We don't film real families in vulnerable moments — every scene is generated.
The approach. Fully AI-generated performers and scenes, composited against exact real screen captures, with narration that is not prompted text-to-speech. The founder read the locked script three times; the strongest read became a timing track, and a licensed narrator voice was conformed to that human cadence phrase by phrase. Pauses were then recomposed against picture so the film opens spacious and tightens as it closes.
The result. Three deliverables from one build: a 58.2-second 16:9 master, a 1080×1920 vertical, and a 30-second cut assembled from the same verified audio — word-identical to the long version, not a re-record. Narration passed a 90-of-90 word-level accuracy check before picture lock. Live on the product's landing page.
Skills: Video Production · Audio Post Production · Audio Editing · Voice-Over · Sound Mixing · Motion Graphics · Brand Video · Video Post-Editing
This is the rate-card anchor — the one item a competitor using off-the-shelf AI tools cannot produce or explain. The supporting detail (pause map, and the word-accuracy gate that failed at 78 of 90 and was repaired rather than papered over) sits behind an expandable on the page.
Title: Comedic Consumer App Ad — Tonal Range From One Production Pipeline
Link: https://plato-portfolio.pages.dev/barcraft/
Upload: 01-Best-Work/BarCraft AI - Party Panic 22s.mp4
Description:
The brief. A cocktail-recipe app aimed at people hosting on short notice. Nothing to be careful about and nothing to prove — the job was purely to be enjoyable.
The approach. The same three-beat build as the flagship, pitched in the opposite register: fast, comedic, a host character rather than an earnest one. The pacing is tighter and the cuts land on the joke rather than on the feature.
The result. A 22-second 1080×1920 master built from the same pipeline as the flagship, retargeted end to end for tone. Two ads in one house style read as a single trick; two ads in different registers read as direction.
Skills: Video Production · Creative Direction · Social Media Video · Generative AI · Short Form Video
Title: Published Health-App Ad — Claim-Compliant Copy + Editable Disclaimer System
Link: https://plato-portfolio.pages.dev/sodiumwise/
Upload: 01-Best-Work/SodiumWise - Hidden Salt (PUBLISHED) 25s.mp4
Description:
The brief. Advertise a sodium-tracking app without making a health claim. The interesting constraint on a regulated product is that the copy has to work inside language limits set before anyone writes a script.
The approach. Restricted terms were identified first, so the whole cut speaks in estimate, range and tracking aid — never diagnosis, treatment or outcome. Disclaimers were built into editable safe zones on the end card rather than baked into the render.
The result. A 25-second 1080×1920 master, published to a live channel. Because the disclaimers sit in editable safe zones, a legal wording change is a same-day edit rather than a new production cycle.
Skills: Video Production · Healthcare Marketing · Regulatory Compliance · Social Media Video · Copywriting · TikTok Marketing
Title: Casting Case Study — Three Versions of One Ad, and Which Shipped
Link: https://plato-portfolio.pages.dev/iteration/
Upload: the narrator-led alternate, then the vendor-rendered version as a second attachment so the contrast is visible inside the item.
Description:
The brief. The flagship ad went through several builds before it shipped. Three of them are worth showing, because the difference between them is not production quality — it is who is on screen.
The approach. The first strips the presenter out entirely and runs narrator-led. It works, which established that the structure was sound and the problem was casting, not construction. The second is a build-vs-buy control: an original character, designed and prompt-directed in-house, then rendered end to end by a paid vendor. The third recasts deliberately for the audience — an applicant at a kitchen table with a study notebook, not a presenter and not an influencer.
The result. The third shipped. Narrator-led became the standing fallback for products with no fitting persona, and the vendor route was declined on a specific finding: it reaches comparable persona quality but cannot carry real in-app footage, which is the proof beat every one of these ads is built on.
Skills: Video Production · A/B Testing · Creative Direction · Generative AI · Marketing Strategy · Short Form Video
Title: Long-Form to Shorts — 7 Vertical Cuts From One 6-Minute Video
Link: https://plato-portfolio.pages.dev/repurposing/
Upload: the 59 s cut, plus the 47 s and 43 s cuts as additional attachments.
Description:
The brief. A six-minute widescreen explainer that no one was going to watch on a phone, and a client who needed a month of vertical posts out of material they already owned.
The approach. Segmented by topic, reframed 16:9 to 9:16 without cropping the subject out of shot, and captioned from transcription. Each cut got its own hook written independently, so the set runs as a sequence rather than seven versions of the same opening.
The result. Seven publishable 1080×1920 verticals, 34–59 seconds each, from one 354-second source file — no new shooting, no new footage licensed. Captions burned in from transcription of what was actually said. Any client with a webinar, podcast or conference-talk backlog already owns the raw material.
Skills: Video Editing · Content Repurposing · Video Post-Editing · Subtitles & Captions · Social Media Video · YouTube Shorts · TikTok Marketing
Lead with this item in proposals even though it sits last on the site — widest addressable client base of the six. Items 1 and 2 close them at a higher rate once you are in conversation.
Give this one its own Project Catalog offer. Its buyer — podcasters, coaches, YouTubers — is a different person from the app-ad buyer and searches differently. A fixed-scope catalog listing ("one long video → 7 vertical shorts, captioned") reaches them without a proposal.*
I make short-form product video that uses real app footage, never generated UI — because image models render on-screen text as gibberish, and a fake interface is the fastest way to lose a viewer's trust.
Six projects: consumer app ads, a published ad for a regulated health product, a seven-cut long-form repurposing set, and a brand film whose narration was mapped to a human performance and gated on word-level accuracy before picture lock.
Every deliverable is reproducible — briefs, prompts, source media and the assembly spec stay together, so a cut can be revised months later without starting over.
Anyone can now generate a video. What I hand over is the build that regenerates it.
The site is noindex. Correct while it is a link you hand out. To let it rank, remove the <meta name="robots" content="noindex"> line in marketing/portfolio-site/site.py and rebuild.
Custom domain. plato-portfolio.pages.dev works but reads as a scratch URL. Attaching a hostname is a DNS change on a live zone, so it is your call — candidates matching existing naming: video.platotools.com, studio.plato-press.com, work.2bluecapital.com.
Poster frames are auto-grabbed at one second. Choosing them deliberately would visibly lift the overview grid, which is the first thing a visitor sees.
Permission. Confirm the Ella film may be shown as portfolio work, given it is live on a product page.
Upwork's own docs disagree on portfolio field limits: the Portfolio Guide gives a 40-character title and 300-character description, while the Enhance-Your-Profile article gives 70 and 600. The lower numbers are the safer floor, so the Short column below fits either.
The full three-block descriptions earlier in this sheet are too long for the field — they run 611–1,063 characters, and every title runs 61–75. Use them for the hosted pages and proposals; use these for the Upwork form.
Medium versions fit if the 600-character limit turns out to be the live one — check the field's own counter when you paste, and drop to Short if it truncates.
/citizen-coach/Title (30 chars)
20s App Ad — Regulated Product
Short description (296 chars — safe under 300)
A citizenship-interview practice app sold to anxious first-time applicants. Three beats in 20s: AI persona hook, real in-app footage as proof, real home-screen CTA. Cast as an earnest applicant, not an influencer. 1080x1920 master for a live App Store product; compliance line in VO and end card.
Medium description (662 chars — use only if the field allows it)
``` A citizenship-interview practice app, sold to nervous first-time applicants who have good reason to distrust anything resembling an immigration shortcut.
Three beats in twenty seconds: an AI persona opens, real in-app footage proves the product works, and the CTA lands on the actual home screen rather than a title card. The persona was cast as an earnest applicant rather than a polished influencer.
Delivered as a 1080x1920 master for a live App Store product, with frame-accurate captions timed from the measured voiceover and the not-affiliated-with-USCIS line carried in both voiceover and end card. No outcome or approval-rate claim anywhere in the cut. ```
Link: https://plato-portfolio.pages.dev/citizen-coach/
/brand-film/Title (33 chars)
58s Brand Film — Human-Cadence VO
Short description (292 chars — safe under 300)
Landing-page film for an AI companion for elderly users. Narration is not prompted TTS: the founder read the locked script three times and a licensed voice was conformed to that cadence, gated at 90-of-90 words before picture lock. Three deliverables from one build. Live on the product site.
Medium description (700 chars — use only if the field allows it)
``` A landing-page film for an AI companion worn by elderly users and monitored by their families. Two audiences, one runtime, and a subject where anything salesy destroys the trust the product depends on. We don't film real families in vulnerable moments - every scene is generated.
Narration is not prompted text-to-speech. The founder read the locked script three times; the strongest read became a timing track, and a licensed narrator voice was conformed to that human cadence phrase by phrase.
Three deliverables from one build: a 58.2s 16:9 master, a 1080x1920 vertical, and a 30s cut word-identical to the long version. Narration passed a 90-of-90 word-level accuracy check before picture lock. ```
Link: https://plato-portfolio.pages.dev/brand-film/
/barcraft/Title (32 chars)
22s Comedic App Ad — Tonal Range
Short description (273 chars — safe under 300)
A cocktail-recipe app for people hosting on short notice. Same three-beat build as the flagship, pitched in the opposite register: fast, comedic, a host character rather than an earnest one. 22s 1080x1920 master. Two ads in one style is a trick; two registers is direction.
Medium description (583 chars — use only if the field allows it)
``` A cocktail-recipe app aimed at people hosting on short notice. Nothing to be careful about and nothing to prove - the job was purely to be enjoyable.
The same three-beat build as the flagship ad, pitched in the opposite register: fast, comedic, a host character rather than an earnest one. The pacing is tighter and the cuts land on the joke rather than on the feature.
Delivered as a 22s 1080x1920 master from the same pipeline, retargeted end to end for tone. Included as range: two ads in one house style read as a single trick; two ads in different registers read as direction. ```
Link: https://plato-portfolio.pages.dev/barcraft/
/sodiumwise/Title (31 chars)
Published Health Ad — Compliant
Short description (275 chars — safe under 300)
A sodium-tracking app advertised without making a health claim. Restricted terms identified first, so the cut speaks in estimate, range and tracking aid - never diagnosis or outcome. Disclaimers sit in editable end-card safe zones. 25s 1080x1920, published to a live channel.
Medium description (596 chars — use only if the field allows it)
``` Advertise a sodium-tracking app without making a health claim. On a regulated product the copy has to work inside language limits set before anyone writes a script.
Restricted terms were identified first, so the whole cut speaks in estimate, range and tracking aid - never diagnosis, treatment or outcome. Disclaimers were built into editable safe zones on the end card rather than baked into the render.
Delivered as a 25s 1080x1920 master and published to a live channel. Because the disclaimers sit in safe zones, a legal wording change is a same-day edit rather than a new production cycle. ```
Link: https://plato-portfolio.pages.dev/sodiumwise/
/iteration/Title (37 chars)
Casting Study — 3 Versions, 1 Shipped
Short description (282 chars — safe under 300)
Three castings of the same 20s ad. Faceless narrator-led; an influencer persona rendered by a paid vendor; and an earnest applicant. Same structure and runtime each time - the only variable is who is on screen. The third shipped. The vendor route was declined on a specific finding.
Medium description (752 chars — use only if the field allows it)
``` The flagship ad went through several builds before it shipped. Three are worth showing, because the difference between them is not production quality - it is who is on screen.
The first strips the presenter out and runs narrator-led. It works, which established that the structure was sound and the problem was casting, not construction. The second is a build-vs-buy control: an original character, prompt-directed in-house, then rendered end to end by a paid vendor. The third recasts deliberately for the audience.
The third shipped. Narrator-led became the standing fallback for products with no fitting persona. The vendor route was declined because it cannot carry real in-app footage, which is the proof beat every one of these ads is built on. ```
Link: https://plato-portfolio.pages.dev/iteration/
/repurposing/Title (30 chars)
Long-Form to 7 Vertical Shorts
Short description (275 chars — safe under 300)
One 354-second widescreen explainer cut into seven vertical shorts, 34-59s each. Reframed 16:9 to 9:16 without cropping the subject out, captions burned in from transcription, and a hook written per cut so the set runs as a sequence. No new shooting, no new footage licensed.
Medium description (638 chars — use only if the field allows it)
``` A six-minute widescreen explainer that nobody was going to watch on a phone, and a client who needed a month of vertical posts from material they already owned.
Segmented by topic, reframed 16:9 to 9:16 without cropping the subject out of shot, and captioned from transcription. Each cut got its own hook written independently, so the set runs as a sequence rather than seven versions of the same opening.
Seven publishable 1080x1920 verticals, 34-59 seconds each, from one 354-second source file - no new shooting and no new footage licensed. Any client with a webinar, podcast or conference-talk backlog already owns the raw material. ```
Link: https://plato-portfolio.pages.dev/repurposing/