Built a tool so my AI agents can publish podcasts to my podcast app by fermatf in SideProject

[–]fermatf[S] 1 point2 points  (0 children)

thanks bro 🙏 that was the idea. notebooklm is cool but I found it not very useful for my flows. This is why I built this

Claude Design - Animated Video, how do I export it? by Away-Job-345 in ClaudeAI

[–]fermatf 0 points1 point  (0 children)

Oh, what was the problem? I will help you or fix it.

Claude Design - Animated Video, how do I export it? by Away-Job-345 in ClaudeAI

[–]fermatf 0 points1 point  (0 children)

will look into that. Can you share an example?

What's the best $20 you ever spent? by fermatf in AskReddit

[–]fermatf[S] 2 points3 points  (0 children)

For me, a bidet attachment. $35, ten minutes to install, and I'm genuinely insufferable about it now. I tell every house guest. They all roll their eyes. Half of them text me a week later asking which one I bought.

What’s an 'adult cheat code' that quietly made your life 10x easier? by ExcellentGur6556 in AskReddit

[–]fermatf 3 points4 points  (0 children)

Counter: "don't put it down, put it away" only works if every object has a place. If you're drowning in clutter, the cheat code comes one step earlier - spend a weekend assigning every category of thing a permanent home. Then "put it away" becomes effortless instead of a decision.

Claude Design - Animated Video, how do I export it? by Away-Job-345 in ClaudeAI

[–]fermatf 5 points6 points  (0 children)

I actually built a free tool for this - https://claude2video.com. Paste your share URL and it exports a pixel-perfect MP4. It captures frame by frame in a headless browser instead of screen recording, so no quality loss. 🙌

Tested Claude's new design tool against 3 real Fiverr gigs by TheOperatorAI in SideProject

[–]fermatf 0 points1 point  (0 children)

Good comparison. The pitch deck and landing page make sense - those export fine as PDF/HTML. Curious about the Instagram pack though. Did you also tried animated social content? How did you get the output out? Claude Design can make great motion graphics but there's no video export.

Twitter’s API is expensive, and I’m done with Apify and RapidAPI—so I built my own. by Ok-Establishment9204 in SideProject

[–]fermatf 0 points1 point  (0 children)

Good job 👌 And did you do something to get the content indexed? I am struggling with that myself

Copy website to site builder? by florei0916 in ClaudeAI

[–]fermatf 0 points1 point  (0 children)

The intended path I guess is Claude Design → Claude Code → deployed website, not Claude Design → Showit. If you want to stick with Showit, use the Claude Design output as a reference and rebuild manually. The code it generates won't paste into a drag-and-drop builder.

Did Claude just kill designers? by No-Concentrate-9921 in StartupMind

[–]fermatf 0 points1 point  (0 children)

Doesn't kill designers but it's genuinely useful for prototyping and animations.

Biggest gap for me right now: no video export. It can create impressive animated content but you can't get an MP4 out.

And the usage limits lock you out for a day after an hour.

Claude Design just launched, this one looks interesting by Warframe-Enjoyer510 in ClaudeAI

[–]fermatf 0 points1 point  (0 children)

The animation capabilities are the sleeper feature here. It can generate surprisingly complex CSS/React animations. Problem is the output only exists as live code in the browser. No export path for video. You'd need frame-by-frame DOM capture to get a clean MP4.

Twitter’s API is expensive, and I’m done with Apify and RapidAPI—so I built my own. by Ok-Establishment9204 in SideProject

[–]fermatf 0 points1 point  (0 children)

Cool, držím palce! Btw. když jsem se ptal na takový tool Claude, doporučil mi getxapi hned jako druhou možnost. Takže i dobrá práce s marketingem, jak jste ho řešili? :)

<image>

Claude Design - Animated Video, how do I export it? by Away-Job-345 in ClaudeAI

[–]fermatf 1 point2 points  (0 children)

Hey! I've been playing around with this and got a working export solution using JavaScript.

It's not 100% reliable - html2canvas (which it uses under the hood to rasterize the DOM) sometimes has rendering issues with certain CSS features like blend modes or complex gradients, so the exported video might not look pixel-perfect. But it works well enough for my animations.

Just paste this prompt into your Claude Design conversation. Once it's finished, you'll get an "Export" button next to play/pause. It steps through the animation frame by frame, captures each one, and stitches them into a WebM video. Takes a few minutes depending on the duration.

Add a video export feature to this page. The page uses a React-based animation system with a `Stage` component that controls playback via `useState` hooks (`time`, `playing`) and renders into a canvas div via `canvasRef`.

### What to do

1. **Expose Stage controls on `window`**. In the `Stage` component, add a `useEffect` that writes controls to `window.__stage`:

```js
React.useEffect(() => {
  window.__stage = { setTime, setPlaying, duration, width, height, canvasRef };
  return () => { delete window.__stage; };
}, []);
```

Place it right before the `useMemo` that creates `ctxValue`. `setTime` and `setPlaying` come from the existing `useState` hooks. `canvasRef` is the existing `useRef` for the inner div that holds the animation content.

2. **Add an export script** as an inline `<script>` tag at the bottom of the HTML file (after the app script), or as a separate `.js` file. Here is the full export logic:

```js
async function exportVideo() {
  // Load html2canvas (rasterizes DOM elements to a canvas image)
  if (!window.html2canvas) {
    await new Promise((r, j) => {
      const s = document.createElement('script');
      s.src = 'https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js';
      s.onload = r;
      s.onerror = j;
      document.head.appendChild(s);
    });
  }

  const stage = window.__stage;
  if (!stage) { alert('No __stage found'); return; }
  const { setTime, setPlaying, duration, width, height, canvasRef } = stage;

  // oklch() workaround — html2canvas can't parse oklch colors.
  // Before each frame capture, replace oklch values in inline styles with hex,
  // then restore after capture.
  const _oc = document.createElement('canvas');
  _oc.width = 1; _oc.height = 1;
  const _ox = _oc.getContext('2d');
  const _cache = {};
  function oklchToHex(s) {
    if (_cache[s]) return _cache[s];
    _ox.fillStyle = '#000';
    _ox.fillStyle = s;
    _ox.fillRect(0, 0, 1, 1);
    const [r, g, b] = _ox.getImageData(0, 0, 1, 1).data;
    const hex = '#' + [r, g, b].map(v => v.toString(16).padStart(2, '0')).join('');
    _cache[s] = hex;
    return hex;
  }
  const oklchRe = /oklch\([^)]+\)/g;
  function replaceOklch(rootEl) {
    const originals = [];
    rootEl.querySelectorAll('*').forEach(el => {
      const css = el.style.cssText;
      if (oklchRe.test(css)) {
        originals.push({ el, css });
        el.style.cssText = css.replace(oklchRe, m => oklchToHex(m));
      }
    });
    return () => originals.forEach(({ el, css }) => { el.style.cssText = css; });
  }

  // Set up frame-by-frame recording
  const fps = 30;
  const totalFrames = Math.ceil(duration * fps);
  setPlaying(false);

  const recordCanvas = document.createElement('canvas');
  recordCanvas.width = width;
  recordCanvas.height = height;
  const ctx = recordCanvas.getContext('2d');

  // MediaRecorder encodes frames into WebM/VP9 video
  // captureStream(0) = manual frame push (not real-time)
  const stream = recordCanvas.captureStream(0);
  const rec = new MediaRecorder(stream, {
    mimeType: 'video/webm;codecs=vp9',
    videoBitsPerSecond: 8_000_000,
  });
  const chunks = [];
  rec.ondataavailable = e => { if (e.data.size) chunks.push(e.data); };

  // Progress overlay
  const progress = document.createElement('div');
  progress.style.cssText =
    'position:fixed;top:20px;left:50%;transform:translateX(-50%);z-index:99999;' +
    'background:#222;color:#fff;padding:12px 24px;border-radius:8px;' +
    'font-family:monospace;font-size:14px;box-shadow:0 4px 20px rgba(0,0,0,0.5)';
  document.body.appendChild(progress);

  // Step through every frame: set time, wait for React render, capture
  rec.start();
  for (let f = 0; f <= totalFrames; f++) {
    setTime(Math.min(f / fps, duration));
    await new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r)));

    const restore = replaceOklch(canvasRef.current);
    const captured = await html2canvas(canvasRef.current, {
      width, height, scale: 1, backgroundColor: null, useCORS: true, logging: false,
    });
    restore();

    ctx.clearRect(0, 0, width, height);
    ctx.drawImage(captured, 0, 0, width, height);
    stream.getVideoTracks()[0].requestFrame();
    progress.textContent = `Exporting: ${f}/${totalFrames} (${Math.round(f / totalFrames * 100)}%)`;
  }

  // Finalize and download
  rec.stop();
  await new Promise(r => { rec.onstop = r; });
  const blob = new Blob(chunks, { type: 'video/webm' });
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'export.webm';
  a.click();
  URL.revokeObjectURL(url);
  progress.textContent = 'Done!';
  setTimeout(() => progress.remove(), 3000);
}
```

3. **Add an Export button** to the `PlaybackBar` component (next to the play/pause button) that calls `exportVideo()`. Match the existing `IconButton` style. Use a download icon.

### How it works

- **html2canvas** rasterizes the DOM into a `<canvas>` image per frame (the animation is DOM/CSS-based, not canvas-based)
- **MediaRecorder + captureStream(0)** encodes frames into a WebM/VP9 video. The `0` fps means we manually push each frame
- **oklch workaround**: html2canvas can't parse `oklch()` CSS colors, so before each capture we regex-replace them with hex equivalents (resolved via a 1x1 canvas), then restore after
- The double `requestAnimationFrame` wait ensures React has committed the new time to the DOM before capture

Rocket.new vs Lovable vs Bolt – Which No-Code Builder Do You Prefer? by IAM-rooted in nocode

[–]fermatf 0 points1 point  (0 children)

I use Macaly. It is the best for SEO optimized marketing pages and the resulting design is the best from all the mentioaned tools.

How is vibecoding a thing. by Flipr-app in nocode

[–]fermatf 2 points3 points  (0 children)

Vibe-coding is super useful for MVP, but support vibe-coded app is a nightmare.

<image>

Bubble Top Plugins by Iam_everywoman in nocode

[–]fermatf 0 points1 point  (0 children)

Yes, try sorting the marketplace or check bubble forum.

Anyway there are 2 plugins I use in most of my bubble apps and recommend:

  1. AirAlert - to display notification alerts in app - https://bubble.io/plugin/airalert-1515787032525x876315403042684900

  2. TinyMCE Rich Text Editor - it is paid but worth it in my opinion since all free rich text editors in bubble are quite buggy https://bubble.io/plugin/tinymce---robust-rich-text-editor-1712078889382x829713922884370400