- Add your OpenAI Api key in the backend/.env
- Start the backend with
pnpm start - Start the frontend with
pnpm dev
Tests
- Run all tests (backend + frontend)
pnpm test - Run tests with coverage and update coverage badges
pnpm test:badges
The following are quick to add but save tons of time down the line.
The whole backend is assuming to be ran async (e.g. via cronjob) as you pointed out. Therefore, expect to wait a while, while the content calendar is being generated through the frontend. I also added an exemplary, simple cronjob in backend/src/calendar/calendar-cron.service.ts
I created a placeholder Execution Service that simulates the Reddit commenting/posting as you outlined in your assignment (no actual implementation). Consequently the Cronjob only schedules the calendar generation which is saved to the persistence layer (currently transient for simplicity for this demo). Would we want to execute the reddit commenting / posting automatically as well, the Execution service would need to be called through the scheduling service as well (or following another pattern depending on expected load, e.g. queue ...).
Prettier is enforced for the whole code base to ensure merge conflicts due to coding styles, etc. are minimised + to meet certain style guidelines for better maintainability. Prettier is executed before each commit.
As per your assignment I was focusing on quality rather than optimising for efficiency of LLM calls for this demo. Of course this can be improved and made cheaper over time. But as so often, rather have a great/good product and improving later on especially since the cost is still reasonable.
When deployed the backend will need some additional security configuration to avoid exploitation of the API (from rate limiting, to proper cors, etc).
I'm a big fan of typed environment variables to avoid deployment issues & configuration mistakes later down the line. For this example project I configured default values to make it easier to startup.
For the same reason I love to use open api client generation for API calls to enable the frontend to call the backend with less risk of calling an outdated endpoint that either accepts a new data format or has moved altogether (type "safety", less dev time wasted down the line). In practice I would create a simple override for the runtime file to enable dynamic backend url pointing based on an environment variable during the build process of the frontend.
The backend is transient (in-memory) for the sake of simplicity for this demo. If I were to add a more solid persistence layer I would add most likely PostgreSQL through TypeORM. As I don't expect any high load on the project (if it would be in production) from the get go, I likely would wait with any kind of caching logic such as with Redis etc.
To make this more sophisticated one could evaluate the output of various LLMs of different providers, or occassionally use a different model which is then evaluated by the algorithm scoring the AI model for its output and after a certain threshold switching to the other model with again occassionally using other models (this way AI expense would be near constant with no excess API calls than just using 1 model).
(without exposing your OpenAI api key)
r/PowerPoint • Tuesday at 9:00 • draft
long-time lurker, first time posting. i have a desk job and i swear the actual content is never the hard part. i'll have solid bullet notes + a rough outline, but then i lose hours to powerpoint stuff… fonts, spacing, aligning things, making every slide look like it belongs in the same universe.
current situation: i need a 12–15 slide deck by tomorrow afternoon. internal stakeholders. so it has to look professional + consistent, but not super marketing / glossy.
i'm fine building in powerpoint, but i'm open to other workflows as long as it exports cleanly to pptx (and doesn't break when someone else opens it).
anyone have a go-to workflow for going from rough notes to finished slides fast? like, do you start with a custom theme, slide master, some kind of layout system, etc?
also… is there an ai presentation tool that doesn't spit out weird generic slides? i've tried a couple and they always look off, or the formatting is a mess when you bring it back into ppt.
help pls. what actually works for you?
7 planned comments • Style: question-answer
honestly, what kind of deck is it (status update vs proposal vs training)? that changes the slide rhythm a lot. what worked for me is set up Slide Master once with a super small "system" (2 layouts: title+bullets, and section header / big takeaway), limit yourself to 1–2 fonts + a tight color palette, and only use the built-in Designer sparingly when you're stuck on a single slide. also have you tried dumping your notes into Outline view first, then promote/demote headings to auto-build the deck structure, it's the fastest way i've found to go from messy bullets to consistent slides
Same here, the formatting rabbit hole eats the whole night. imo start with a tight narrative (problem → options → recommendation → risks/asks) and then use one "decision slide" layout you repeat across the deck (context, what changed, options, rec, impact, open questions) so consistency is basically automatic
for anything customer facing i'll get fancy, but for internal stakeholders i just lock a simple theme + 2 fonts in Slide Master and only use 3-4 layouts. AI-wise, i've had ok luck using it to draft the outline/section headers then doing cleanup in PPT, Slideforge gave me a decent first-pass deck from bullets but the visuals still needed manual alignment and a quick pass to de-template it
same here lol, i do a rough pass in google slides first just to lock the story + slide count fast, then move to powerpoint for the alignment/masters polish 😅 +1 to stealing one "good" internal deck as your base instead of starting blank, it keeps everything in the same universe. for visuals i'll mock stuff in canva-ish tools but heads up the ppt export can get funky w fonts so i usually paste as images if it's tight on time
honestly the fastest thing i've found (as a consultant who lives in decks) is to build a wireframe first: slide titles + one sentence per slide, then drop everything into like 4–5 repeatable layouts (agenda, 2-column, big number, simple chart, and a "so what/next steps" slide) so you're not reinventing spacing every time. then pick a grid and stick to it, i use a simple 8/16/24 spacing rule + align/distribute religiously so it all looks like the same universe even if it's not "designed"
i've tried a bunch of tools for AI drafting and they can be decent for getting a first pass structure, but the pptx handoff usually gets weird, and for anything customer facing (or even stakeholder-facing tbh) i still end up doing final chart/diagram polish in PowerPoint because the only one that matters is the version that opens cleanly on someone else's machine
honestly from a sales/demo angle, readability beats fancy every time, i use a simple "headline + proof" per slide (one sentence takeaway up top, then 1 chart/screenshot/3 bullets) and it keeps the deck from turning into a design project. lock 2 fonts/colors in slide master bc i hate picking fonts lol, and force yourself to only use like 3 layouts or it starts looking really funky. also build a little "demo deck library" you can steal from (customer logos, pricing table, case study slide), saves my sanity when something's due tomorrow
honestly yeah headline+proof is solid, but idk about these AI slide tools… they always look like the same generic "consultant deck," sounds too good to be true. if you used Slideforge, does it export a real editable pptx w actual shapes/text or is it mostly flattened images, what's the catch? also i'd be real careful pasting internal notes into random web tools, privacy/retention policies are usually hand-wavy at best
wait really? what's "Outline view" in PPT and how does that work for turning messy notes into actual slides fast 😅 also is Slide Master worth learning if this is kinda a one-off deck, or is it overkill, oh nice if you've got a super basic checklist you follow (like 5 steps) drop it pls
r/ClaudeAI • Thursday at 12:00 • draft
long-time lurker here, i comment once in a while when i've got something useful but mostly just read.
i work in tech (not a dev) and i'm constantly doing internal updates + the occasional customer-facing deck. my problem: i'll dump a bunch of thoughts into Notion/Docs, end up with a messy outline + 40 bullets, and then i lose an hour in Google Slides doing the whole "does this look like a real presentation" dance.
if you're using Claude for this, what's your actual workflow? like step-by-step. do you have a prompt template you reuse (ex: ask it to propose an outline, then write speaker notes, then slide titles, etc), or are you exporting to something else (markdown -> some deck tool, google slides add-on, whatever)?
i'm not trying to generate a perfect deck automatically, i just want to get from rough notes -> a clean structure + decent wording without the layout rabbit hole. anyone got a process that actually sticks? help pls
7 planned comments • Style: agreement
honestly what worked for me is a 2-pass prompt: first paste the messy notes and ask claude to propose a narrative arc + slide-by-slide outline (title, 3–5 bullets, 1 line takeaway), then a second pass to rewrite each slide with constraints like "max 4 bullets, max 8 words per bullet, active verbs" + add speaker notes per slide. have you tried telling it to flag where you're mixing audiences (internal vs customer) and to suggest cuts, it saves a ton of the "40 bullets" problem, then yeah i still paste into slides manually because layout is the pain point imo
Same here, outline-first is the only thing that sticks for me, but i start by telling it the audience + what decision i need them to make (otherwise you get a "nice deck" that goes nowhere). then i have it restructure my messy notes into a PM flow: problem, context, options, recommendation, risks, next steps, and generate slide titles + 3-5 bullets + speaker notes per slide, fine for internal notes but for anything customer facing i still do a pass for tone + claims. if you want to skip the layout rabbit hole, i'll sometimes paste the structured markdown into one of those auto-layout deck tools, it's faster but you'll still edit headings and charts
i do this a lot for founders + internal exec updates, and claude is best for story/structure (what's the 1-line takeaway, what are the 3–5 sections, what gets cut), then i let a deck tool handle layout so i dont burn time nudging boxes around. workflow is basically: paste messy notes → ask claude to propose a tight narrative + slide-by-slide outline (title + 3 bullets max + "so what") → iterate once on the spine → have it rewrite each slide in consistent voice + add speaker notes, then i export that into Gamma / Beautiful.ai / Slideforge depending on the day (I've tried a bunch of tools), for anything customer facing i still do a final pass for consistency + visuals because the only one that really matters is the story, the tool just saves you from formatting hell
yeah i use claude as the first-draft machine, but ops reality is i need a repeatable template for weekly updates, so i paste my messy notes and ask it to: 1) pick 5–7 slide headlines, 2) cap each slide to 3 bullets, 3) add speaker notes + "so what" line per slide, then i just copy/paste into our existing Slides template blocks
i've also tried slideforge for the first pass (nice for getting a coherent structure fast), but i still end up tweaking in google slides anyway, imo consistency > fancy design, just like it says in the title the layout rabbit hole is the real enemy
same, i use claude mostly for structure + constraints (turn the mess into an outline, then rewrite each slide as 1 title + a few bullets + speaker notes), then i just drop it into a basic template so i dont get sucked into layout hell tbh. what numbers do you all use for constraints tho, like max bullets per slide + words per bullet for readability? idk what the sweet spot is
wait really? what's your actual prompt template for the constraints, like do you paste a reusable block or wing it each time 😅 also how do you get claude to keep terminology consistent across slides (same names for projects/metrics etc), and for charts/tables do you have it suggest visuals or is it mostly just text bullets imo
honestly idk about that, every time i've tried "constraints" prompts the output looks like generic consultant-deck filler and then you're stuck fighting the tool's vibe, sounds too good to be true unless the export/edit loop is solid. what's the catch w/ terminology consistency, are you feeding it a glossary + forcing it to reuse exact metric names, and are you exporting to PPTX / google slides in a way that's actually editable for real work or is it basically a one-way pretty render
r/PowerPoint • Saturday at 15:00 • draft
anyone else get stuck in the awkward middle phase?
i've got a desk job and i'm constantly turning random meeting notes + half-baked bullets into slides. once i have a clean outline i'm fine. but getting from "brain dump" to "this looks like a real deck" is where i lose hours.
my usual failure mode is opening powerpoint too early and then i'm suddenly obsessing over layouts, fonts, spacing, alignment… and it's midnight and i've made like 3 slides.
do you start in ppt from the beginning, or do you draft somewhere else first (word, onenote, google doc, whatever) and only move to ppt when the structure is solid?
also curious if anyone's using ai tools for a first pass but still presenting in powerpoint. i've tried a couple and they either look super generic or do weird stuff with spacing. i'm basically looking for the "best ai presentation maker" that doesn't scream ai.
and for consistency: do you all rely on one company template, build your own slide master, or is there some other trick? help pls
9 planned comments • Style: debate
honestly i stay in ppt but i delay "design brain" as long as possible: have you tried setting up Slide Master + theme fonts/colors first, then forcing yourself to only use those layouts (no manual nudging). what worked for me is starting with one ugly "content dump" slide where i paste all notes/bullets, then i just split it into slides and only at the end do spacing/alignment. consistency beats fancy every time, if the master/layouts are solid the deck looks legit even if it's simple
same here lol, if i open ppt too early i'll spend 2 hrs nudging boxes and have 0 content 😭 i brain dump in a doc first, then do a quick ugly draft in google slides/canva to get flow, export to ppt at the end (but ngl the export loves to wreck fonts/spacing so i keep it simple) +1 on using one template/slide master so you're not reinventing layouts every time
same here, i keep a living outline in a doc and dont open ppt until the story is basically locked, otherwise i'll burn an hour on alignment for no reason. for anything customer facing i'll use copilot in powerpoint or gemini to summarize/cluster messy notes, fine for internal notes but i still rewrite the narrative myself. i've also tried slideforge to turn rough bullets into a first-pass deck, it's helpful when you already know the story and just dont want to fight layouts, but you'll still need to clean up spacing + swap in your company slide master for consistency
honestly yeah, dont open ppt until the story is locked or you'll spend 2 hours nudging boxes, i hate picking fonts lol. imo consistency matters way more than animations, i just reuse the same 4 slide types for demos (problem, proof, pricing, next steps) and it saves my sanity, fighting new layouts every slide is where it starts to look really funky
yeah consistency > fancy, but ngl the "draft in X then export to ppt" thing is where i get burned, spacing/fonts always come over janky and you end up fixing it all anyway. also idk about that "best ai presentation maker" ask, do they mean pretty layouts or actual accurate content w/ citations, cuz a lot of these tools spit out confident-looking nonsense, sounds too good to be true… what's the catch
Comment 6 • +18min • Persona: jordan_consults • Reply to: comment_4 • Mentions product Subtlety: 70%
yeah this is the catch imo: decks are narrative + clean visuals, and AI is decent at clustering messy notes into a first-pass structure but it can't do the client nuance or make risky claims safe, so for anything customer facing i still lock the story spine first then drop into a fixed template/slide master and only polish at the end. i've tried a bunch of tools, Beautiful.ai and Tome are fine for quick drafts, and Slideforge was ok when i already had an outline and just wanted a baseline deck, but you still end up swapping in your firm style + tightening wording/citations because the "confident nonsense" problem is real
wait really? how do you keep citations + numbers accurate when you let ai cluster/summarize notes, do you make it link sources or do you just manually fact check everything after 😅, is the flow basically ai draft -> human sanity check -> drop into your ppt master/theme?
honestly i dont trust ai with numbers/citations at all, it can help cluster notes but it won't fix unclear thinking so i treat it like a rough outline and then i manually verify everything before it hits a slide. ops-wise the real time saver is enforcing one Slide Master + a tiny component library (1-2 chart styles, table, callout, timeline) so you're not re-inventing layouts every deck, just like it says in the title consistency beats "best tool" every time
tbh yeah, ai drafts are fine for structure but any numbers/claims still need a human eyeball, idk about that "it saves all the work" vibe. sounds too good to be true, what's the catch if you're not verifying everything anyway
[Nest] 19182 - 12/12/2025, 1:21:07 PM LOG [CalendarService] Starting calendar generation for Slideforge
[Nest] 19182 - 12/12/2025, 1:21:07 PM LOG [CalendarService] Phase 1: Generating candidate posts...
[Nest] 19182 - 12/12/2025, 1:21:07 PM LOG [GenerationService] Generating 6 candidates for 3 weekly posts
[Nest] 19182 - 12/12/2025, 1:21:28 PM LOG [GenerationService] Generated 6 post candidates
[Nest] 19182 - 12/12/2025, 1:21:28 PM LOG [CalendarService] Generated 6 candidates
[Nest] 19182 - 12/12/2025, 1:21:28 PM LOG [CalendarService] Phase 1.5: Ranking candidates...
[Nest] 19182 - 12/12/2025, 1:21:28 PM LOG [CalendarService] Top candidate score: 0.95
[Nest] 19182 - 12/12/2025, 1:21:28 PM LOG [CalendarService] Phase 2 & 3: Generating threads and running quality checks...
[Nest] 19182 - 12/12/2025, 1:21:28 PM LOG [CalendarService] Processing candidates 1-3 of 6...
[Nest] 19182 - 12/12/2025, 1:21:28 PM LOG [GenerationService] [Thread] Starting generation for: "What’s the best AI presentation maker if I already have an outline but need a polished deck fast?"
[Nest] 19182 - 12/12/2025, 1:21:28 PM LOG [GenerationService] [Thread] Step 1/3: Director planning conversation...
[Nest] 19182 - 12/12/2025, 1:21:51 PM LOG [GenerationService] [Thread] Step 1/3: Director planned 7 comments (23092ms)
[Nest] 19182 - 12/12/2025, 1:21:51 PM LOG [GenerationService] [Thread] Step 2/3: Refining post in OP voice...
[Nest] 19182 - 12/12/2025, 1:21:56 PM LOG [GenerationService] [Thread] Step 2/3: Post refined (5084ms)
[Nest] 19182 - 12/12/2025, 1:21:56 PM LOG [GenerationService] [Thread] Step 3/3: Generating 7 comments...
[Nest] 19182 - 12/12/2025, 1:21:56 PM LOG [GenerationService] [Thread] - Generating 5 root comments in parallel...
[Nest] 19182 - 12/12/2025, 1:22:02 PM LOG [GenerationService] [Thread] - Generating 2 reply comments...
[Nest] 19182 - 12/12/2025, 1:22:08 PM LOG [GenerationService] [Thread] Step 3/3: Generated 7 comments (11805ms)
[Nest] 19182 - 12/12/2025, 1:22:08 PM LOG [GenerationService] [Thread] Generating embedding for similarity checks...
[Nest] 19182 - 12/12/2025, 1:22:08 PM LOG [GenerationService] [Thread] ✓ Complete! 7 comments, total time: 40.4s
[Nest] 19182 - 12/12/2025, 1:22:19 PM LOG [CalendarService] Thread "tips for turning messy notes into a clean deck fast (without it screaming template)" passed quality check (1/3 needed)
[Nest] 19182 - 12/12/2025, 1:22:19 PM LOG [GenerationService] [Thread] Starting generation for: "What’s your best workflow for turning Claude outputs into a polished slide deck fast?"
[Nest] 19182 - 12/12/2025, 1:22:19 PM LOG [GenerationService] [Thread] Step 1/3: Director planning conversation...
[Nest] 19182 - 12/12/2025, 1:22:46 PM LOG [GenerationService] [Thread] Step 1/3: Director planned 12 comments (27388ms)
[Nest] 19182 - 12/12/2025, 1:22:46 PM LOG [GenerationService] [Thread] Step 2/3: Refining post in OP voice...
[Nest] 19182 - 12/12/2025, 1:22:53 PM LOG [GenerationService] [Thread] Step 2/3: Post refined (6452ms)
[Nest] 19182 - 12/12/2025, 1:22:53 PM LOG [GenerationService] [Thread] Step 3/3: Generating 12 comments...
[Nest] 19182 - 12/12/2025, 1:22:53 PM LOG [GenerationService] [Thread] - Generating 8 root comments in parallel...
[Nest] 19182 - 12/12/2025, 1:22:57 PM LOG [GenerationService] [Thread] - Generating 4 reply comments...
[Nest] 19182 - 12/12/2025, 1:23:08 PM LOG [GenerationService] [Thread] Step 3/3: Generated 12 comments (14889ms)
[Nest] 19182 - 12/12/2025, 1:23:08 PM LOG [GenerationService] [Thread] Generating embedding for similarity checks...
[Nest] 19182 - 12/12/2025, 1:23:08 PM LOG [GenerationService] [Thread] ✓ Complete! 12 comments, total time: 49.3s
[Nest] 19182 - 12/12/2025, 1:23:21 PM WARN [CalendarService] Thread "anyone got a good claude workflow for turning messy notes into a slide deck?" failed quality check: Remove any placeholder text; Ensure post title and body meet minimum length
[Nest] 19182 - 12/12/2025, 1:23:21 PM LOG [GenerationService] [Thread] Starting generation for: "Best AI presentation maker that plays nicely with PowerPoint (editable slides, not locked exports)?"
[Nest] 19182 - 12/12/2025, 1:23:21 PM LOG [GenerationService] [Thread] Step 1/3: Director planning conversation...
[Nest] 19182 - 12/12/2025, 1:23:49 PM LOG [GenerationService] [Thread] Step 1/3: Director planned 9 comments (27564ms)
[Nest] 19182 - 12/12/2025, 1:23:49 PM LOG [GenerationService] [Thread] Step 2/3: Refining post in OP voice...
[Nest] 19182 - 12/12/2025, 1:23:54 PM LOG [GenerationService] [Thread] Step 2/3: Post refined (5425ms)
[Nest] 19182 - 12/12/2025, 1:23:54 PM LOG [GenerationService] [Thread] Step 3/3: Generating 9 comments...
[Nest] 19182 - 12/12/2025, 1:23:54 PM LOG [GenerationService] [Thread] - Generating 4 root comments in parallel...
[Nest] 19182 - 12/12/2025, 1:23:57 PM LOG [GenerationService] [Thread] - Generating 5 reply comments...
[Nest] 19182 - 12/12/2025, 1:24:16 PM LOG [GenerationService] [Thread] Step 3/3: Generated 9 comments (21675ms)
[Nest] 19182 - 12/12/2025, 1:24:16 PM LOG [GenerationService] [Thread] Generating embedding for similarity checks...
[Nest] 19182 - 12/12/2025, 1:24:16 PM LOG [GenerationService] [Thread] ✓ Complete! 9 comments, total time: 55.0s
[Nest] 19182 - 12/12/2025, 1:24:31 PM LOG [CalendarService] Thread "how do you go from messy notes to a decent ppt without burning your whole evening" passed quality check (2/3 needed)
[Nest] 19182 - 12/12/2025, 1:24:31 PM LOG [CalendarService] Processing candidates 4-6 of 6...
[Nest] 19182 - 12/12/2025, 1:24:31 PM LOG [GenerationService] [Thread] Starting generation for: "How are you prompting Claude to generate slide-ready narratives (not just bullet dumps)?"
[Nest] 19182 - 12/12/2025, 1:24:31 PM LOG [GenerationService] [Thread] Step 1/3: Director planning conversation...
[Nest] 19182 - 12/12/2025, 1:24:52 PM LOG [GenerationService] [Thread] Step 1/3: Director planned 7 comments (21142ms)
[Nest] 19182 - 12/12/2025, 1:24:52 PM LOG [GenerationService] [Thread] Step 2/3: Refining post in OP voice...
[Nest] 19182 - 12/12/2025, 1:24:57 PM LOG [GenerationService] [Thread] Step 2/3: Post refined (5379ms)
[Nest] 19182 - 12/12/2025, 1:24:57 PM LOG [GenerationService] [Thread] Step 3/3: Generating 7 comments...
[Nest] 19182 - 12/12/2025, 1:24:57 PM LOG [GenerationService] [Thread] - Generating 5 root comments in parallel...
[Nest] 19182 - 12/12/2025, 1:25:02 PM LOG [GenerationService] [Thread] - Generating 2 reply comments...
[Nest] 19182 - 12/12/2025, 1:25:08 PM LOG [GenerationService] [Thread] Step 3/3: Generated 7 comments (10459ms)
[Nest] 19182 - 12/12/2025, 1:25:08 PM LOG [GenerationService] [Thread] Generating embedding for similarity checks...
[Nest] 19182 - 12/12/2025, 1:25:09 PM LOG [GenerationService] [Thread] ✓ Complete! 7 comments, total time: 37.9s
[Nest] 19182 - 12/12/2025, 1:25:23 PM LOG [CalendarService] Thread "how are you using claude to turn messy notes into an actual slide deck?" passed quality check (3/3 needed)
[Nest] 19182 - 12/12/2025, 1:25:23 PM LOG [CalendarService] Reached target of 3 passing threads, stopping generation
[Nest] 19182 - 12/12/2025, 1:25:23 PM LOG [CalendarService] Generated 4 complete threads, 3 passed quality checks
[Nest] 19182 - 12/12/2025, 1:25:23 PM LOG [CalendarService] Phase 4: Scheduling threads...
[Nest] 19182 - 12/12/2025, 1:25:23 PM LOG [SchedulerService] Scheduled "tips for turning messy notes into a clean deck fast (without it screaming template)" for Tuesday at 9:00
[Nest] 19182 - 12/12/2025, 1:25:23 PM LOG [SchedulerService] Scheduled "how are you using claude to turn messy notes into an actual slide deck?" for Thursday at 12:00
[Nest] 19182 - 12/12/2025, 1:25:23 PM LOG [SchedulerService] Scheduled "how do you go from messy notes to a decent ppt without burning your whole evening" for Saturday at 15:00
[Nest] 19182 - 12/12/2025, 1:25:23 PM LOG [CalendarService] Phase 5: Building calendar...
[Nest] 19182 - 12/12/2025, 1:25:23 PM LOG [CalendarService] Calendar generated successfully with 3 posts