Compare commits
7 Commits
mazeincodi
...
izadoesdev
Author | SHA1 | Date | |
---|---|---|---|
1d13e9a67f | |||
9b29122a2c | |||
dcbae4554c | |||
33916d4e91 | |||
595f4c5f88 | |||
77560dc5aa | |||
e8a22d99cb |
17
README.md
17
README.md
@ -1,16 +1,12 @@
|
|||||||
<table>
|
<img src="apps/web/public/logo.png" align="left" width="130" height="130">
|
||||||
<tr>
|
|
||||||
<td width="130">
|
<div align="right">
|
||||||
<img src="apps/web/public/logo.png" width="130" height="130">
|
|
||||||
</td>
|
|
||||||
<td align="right">
|
|
||||||
|
|
||||||
# OpenCut (prev AppCut)
|
# OpenCut (prev AppCut)
|
||||||
### A free, open-source video editor for web, desktop, and mobile.
|
### A free, open-source video editor for web, desktop, and mobile.
|
||||||
|
</div>
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
## Why?
|
## Why?
|
||||||
|
|
||||||
@ -24,6 +20,7 @@
|
|||||||
- Multi-track support
|
- Multi-track support
|
||||||
- Real-time preview
|
- Real-time preview
|
||||||
- No watermarks or subscriptions
|
- No watermarks or subscriptions
|
||||||
|
- Analytics provided by [Databuddy](https://www.databuddy.cc?utm_source=opencut), 100% Anonymized & Non-invasive.
|
||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
|
@ -42,13 +42,8 @@ export function Header() {
|
|||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
<Link href="https://github.com/OpenCut-app/OpenCut" target="_blank">
|
<Link href="https://github.com/OpenCut-app/OpenCut" target="_blank">
|
||||||
<Button variant="text" className="text-sm">
|
|
||||||
GitHub
|
|
||||||
</Button>
|
|
||||||
</Link>
|
|
||||||
<Link href={session ? "/editor" : "/auth/login"}>
|
|
||||||
<Button size="sm" className="text-sm ml-4">
|
<Button size="sm" className="text-sm ml-4">
|
||||||
Start editing
|
GitHub
|
||||||
<ArrowRight className="h-4 w-4" />
|
<ArrowRight className="h-4 w-4" />
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
|
@ -82,12 +82,12 @@ export function Hero({ signupCount }: HeroProps) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="relative min-h-[calc(100vh-4rem)] flex flex-col items-center justify-center text-center px-4">
|
<div className="min-h-[calc(100vh-4rem)] flex flex-col justify-between items-center text-center px-4">
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0 }}
|
initial={{ opacity: 0 }}
|
||||||
animate={{ opacity: 1 }}
|
animate={{ opacity: 1 }}
|
||||||
transition={{ duration: 1 }}
|
transition={{ duration: 1 }}
|
||||||
className="max-w-3xl mx-auto"
|
className="max-w-3xl mx-auto w-full flex-1 flex flex-col justify-center"
|
||||||
>
|
>
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
@ -148,7 +148,7 @@ export function Hero({ signupCount }: HeroProps) {
|
|||||||
initial={{ opacity: 0, y: 10 }}
|
initial={{ opacity: 0, y: 10 }}
|
||||||
animate={{ opacity: 1, y: 0 }}
|
animate={{ opacity: 1, y: 0 }}
|
||||||
transition={{ delay: 0.8, duration: 0.6 }}
|
transition={{ delay: 0.8, duration: 0.6 }}
|
||||||
className="mt-6 inline-flex items-center gap-2 bg-muted/30 px-4 py-2 rounded-full text-sm text-muted-foreground"
|
className="mt-8 inline-flex items-center gap-2 bg-muted/30 px-4 py-2 rounded-full text-sm text-muted-foreground justify-center"
|
||||||
>
|
>
|
||||||
<div className="w-2 h-2 bg-green-500 rounded-full animate-pulse" />
|
<div className="w-2 h-2 bg-green-500 rounded-full animate-pulse" />
|
||||||
<span>{signupCount.toLocaleString()} people already joined</span>
|
<span>{signupCount.toLocaleString()} people already joined</span>
|
||||||
@ -157,7 +157,7 @@ export function Hero({ signupCount }: HeroProps) {
|
|||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
<motion.div
|
<motion.div
|
||||||
className="absolute bottom-12 left-0 right-0 text-center text-sm text-muted-foreground/60"
|
className="mb-8 text-center text-sm text-muted-foreground/60"
|
||||||
initial={{ opacity: 0 }}
|
initial={{ opacity: 0 }}
|
||||||
animate={{ opacity: 1 }}
|
animate={{ opacity: 1 }}
|
||||||
transition={{ delay: 0.8, duration: 0.8 }}
|
transition={{ delay: 0.8, duration: 0.8 }}
|
||||||
|
2
bun.lock
2
bun.lock
@ -430,7 +430,7 @@
|
|||||||
|
|
||||||
"@types/d3-timer": ["@types/d3-timer@3.0.2", "", {}, "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="],
|
"@types/d3-timer": ["@types/d3-timer@3.0.2", "", {}, "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="],
|
||||||
|
|
||||||
"@types/node": ["@types/node@22.15.32", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-3jigKqgSjsH6gYZv2nEsqdXfZqIFGAV36XYYjf9KGZ3PSG+IhLecqPnI310RvjutyMwifE2hhhNEklOUrvx/wA=="],
|
"@types/node": ["@types/node@22.15.33", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-wzoocdnnpSxZ+6CjW4ADCK1jVmd1S/J3ArNWfn8FDDQtRm8dkDg7TA+mvek2wNrfCgwuZxqEOiB9B1XCJ6+dbw=="],
|
||||||
|
|
||||||
"@types/pg": ["@types/pg@8.15.4", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-I6UNVBAoYbvuWkkU3oosC8yxqH21f4/Jc4DK71JLG3dT2mdlGe1z+ep/LQGXaKaOgcvUrsQoPRqfgtMcvZiJhg=="],
|
"@types/pg": ["@types/pg@8.15.4", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-I6UNVBAoYbvuWkkU3oosC8yxqH21f4/Jc4DK71JLG3dT2mdlGe1z+ep/LQGXaKaOgcvUrsQoPRqfgtMcvZiJhg=="],
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "5432:5432"
|
- "5432:5432"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "pg_isready -U opencut"]
|
test: ["CMD-SHELL", "pg_isready -U opencut"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"name": "opencut",
|
||||||
"packageManager": "bun@1.2.17",
|
"packageManager": "bun@1.2.17",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"turbo": "^2.5.4"
|
"turbo": "^2.5.4"
|
||||||
|
Reference in New Issue
Block a user