Skip to content

Commit 3d784ed

Browse files
Miyamura80claude
andcommitted
πŸ”¨ add promotional GIF animation with Remotion
Self-contained Remotion sub-project at media/promo/ that renders an animated GIF (800x450, 10s, ~4.8MB) showcasing the template's value prop: a Ferris crab (Rust) and dumpling bun (Bun/TS) collaborating to build and test a desktop app. Four overlapping scenes: Entrance, Build, Test, Finale β€” all driven by inline SVG characters with spring-based animations and no external image assets. Render via `make promo`. Also fixes pre-existing audit vulnerabilities (minimatch, ajv) via package.json overrides. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 9a59e28 commit 3d784ed

27 files changed

+1326
-13
lines changed

β€Ž.gitignoreβ€Ž

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ src-tauri/target/
2121
# Bun lock cache
2222
bun.lockb
2323
docs/bun.lockb
24+
media/promo/bun.lockb
25+
media/promo/package-lock.json
2426

2527
# Environments & secrets
2628
.env

β€ŽMakefileβ€Ž

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ init: ## Initialize project (usage: make init name=my-project description="my de
9797
@echo "$(GREEN)βœ… Updated project name, identifier, and description.$(RESET)"
9898

9999
### Asset Generation
100-
.PHONY: banner logo
100+
.PHONY: banner logo promo
101101

102102
banner: ## Generate project banner image (requires APP__GEMINI_API_KEY)
103103
@echo "$(YELLOW)πŸ”Generating banner...$(RESET)"
@@ -109,6 +109,11 @@ logo: ## Generate logo, icons, and favicon (requires APP__GEMINI_API_KEY)
109109
@cd src-tauri && cargo run --bin asset-gen -- logo
110110
@echo "$(GREEN)βœ…Logo assets saved to docs/public/$(RESET)"
111111

112+
promo: ## Generate promotional GIF animation
113+
@echo "$(YELLOW)🎬 Rendering promotional GIF...$(RESET)"
114+
@cd media/promo && bun install && bun run render
115+
@echo "$(GREEN)βœ… Promo GIF rendered at media/promo.gif$(RESET)"
116+
112117

113118

114119
########################################################

β€ŽREADME.mdβ€Ž

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@
2424
<img alt="GitHub Actions Workflow Status" src="https://img.shields.io/github/actions/workflow/status/Miyamura80/Tauri-Template/rust_checks.yaml?branch=main">
2525
</p>
2626

27-
---
27+
<p align="center">
28+
<img src="media/promo.gif" alt="Crab and Bun build and test a desktop app" width="600">
29+
</p>
30+
31+
---
2832

2933
## Key Features
3034

β€Žbiome.jsonβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"useIgnoreFile": true
77
},
88
"files": {
9-
"includes": ["**", "!!**/dist"]
9+
"includes": ["**", "!!**/dist", "!!media/promo"]
1010
},
1111
"formatter": {
1212
"enabled": true,

β€Žbun.lockβ€Ž

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

β€Ždocs/package.jsonβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"@types/node": "^25.2.0",
2828
"@types/react": "^19.2.8",
2929
"@types/react-dom": "^19.2.3",
30-
"eslint": "^9.39.2",
30+
"eslint": "^9.39.3",
3131
"eslint-config-next": "16.1.6",
3232
"next-validate-link": "^1.6.4",
3333
"postcss": "^8.5.6",

β€Žmedia/promo.gifβ€Ž

4.75 MB
Loading

β€Žmedia/promo/package.jsonβ€Ž

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"name": "tauri-template-promo",
3+
"private": true,
4+
"scripts": {
5+
"studio": "remotion studio src/index.ts",
6+
"render": "remotion render src/index.ts Promo --image-format=png --every-nth-frame=3 --output=../promo.gif"
7+
},
8+
"dependencies": {
9+
"remotion": "^4.0.428",
10+
"@remotion/cli": "^4.0.428",
11+
"@remotion/google-fonts": "^4.0.428",
12+
"react": "^19.1.0",
13+
"react-dom": "^19.1.0"
14+
},
15+
"devDependencies": {
16+
"@types/react": "^19.1.8",
17+
"typescript": "~5.9.3"
18+
}
19+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { Config } from "@remotion/cli/config";
2+
3+
Config.setVideoImageFormat("png");

β€Žmedia/promo/src/Promo.tsxβ€Ž

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import type React from "react";
2+
import { AbsoluteFill, Sequence } from "remotion";
3+
import { SceneBuild } from "./scenes/SceneBuild";
4+
import { SceneEntrance } from "./scenes/SceneEntrance";
5+
import { SceneFinale } from "./scenes/SceneFinale";
6+
import { SceneTest } from "./scenes/SceneTest";
7+
import { Background } from "./shared/Background";
8+
9+
export const Promo: React.FC = () => {
10+
return (
11+
<AbsoluteFill>
12+
<Background />
13+
14+
{/* Scene 1: Entrance – frames 0-89 */}
15+
<Sequence from={0} durationInFrames={90} premountFor={0}>
16+
<SceneEntrance />
17+
</Sequence>
18+
19+
{/* Scene 2: Build – frames 75-179 (overlaps entrance by 15) */}
20+
<Sequence from={75} durationInFrames={105} premountFor={15}>
21+
<SceneBuild />
22+
</Sequence>
23+
24+
{/* Scene 3: Test – frames 165-254 (overlaps build by 15) */}
25+
<Sequence from={165} durationInFrames={90} premountFor={15}>
26+
<SceneTest />
27+
</Sequence>
28+
29+
{/* Scene 4: Finale – frames 240-299 (overlaps test by 15) */}
30+
<Sequence from={240} durationInFrames={60} premountFor={15}>
31+
<SceneFinale />
32+
</Sequence>
33+
</AbsoluteFill>
34+
);
35+
};

0 commit comments

Comments
Β (0)