-
Notifications
You must be signed in to change notification settings - Fork 10
added landing page #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,42 @@ | ||||||||||||||
| import { motion } from 'framer-motion'; | ||||||||||||||
|
|
||||||||||||||
| export function About() { | ||||||||||||||
| return ( | ||||||||||||||
| <section className="py-24 px-6 bg-zinc-950"> | ||||||||||||||
| <div className="max-w-4xl mx-auto text-center"> | ||||||||||||||
| <motion.span | ||||||||||||||
| initial={{ opacity: 0 }} | ||||||||||||||
| whileInView={{ opacity: 1 }} | ||||||||||||||
| viewport={{ once: true }} | ||||||||||||||
| className="text-electric-400 font-semibold tracking-wider text-sm uppercase mb-4 block" | ||||||||||||||
| > | ||||||||||||||
| About The Project | ||||||||||||||
| </motion.span> | ||||||||||||||
|
|
||||||||||||||
| <motion.h2 | ||||||||||||||
| initial={{ opacity: 0, y: 20 }} | ||||||||||||||
| whileInView={{ opacity: 1, y: 0 }} | ||||||||||||||
| viewport={{ once: true }} | ||||||||||||||
| className="text-3xl md:text-5xl font-bold text-white mb-8" | ||||||||||||||
| > | ||||||||||||||
| An Open Source AI Coding Workspace | ||||||||||||||
| </motion.h2> | ||||||||||||||
|
|
||||||||||||||
| <motion.div | ||||||||||||||
| initial={{ opacity: 0, y: 20 }} | ||||||||||||||
| whileInView={{ opacity: 1, y: 0 }} | ||||||||||||||
| viewport={{ once: true }} | ||||||||||||||
| transition={{ delay: 0.1 }} | ||||||||||||||
| className="p-8 rounded-2xl bg-zinc-900/50 border border-zinc-800 backdrop-blur-sm" | ||||||||||||||
| > | ||||||||||||||
| <p className="text-lg md:text-xl text-zinc-400 leading-relaxed"> | ||||||||||||||
| <strong className="text-white">Bolty</strong> is a community-driven clone inspired by <em className="text-white">bolt.new</em>. | ||||||||||||||
| It empowers developers to build, run, and deploy full-stack applications without leaving the browser. | ||||||||||||||
| By leveraging advanced AI models, Bolty turns natural language prompts into production-ready code, | ||||||||||||||
|
Comment on lines
+33
to
+35
|
||||||||||||||
| <strong className="text-white">Bolty</strong> is a community-driven clone inspired by <em className="text-white">bolt.new</em>. | |
| It empowers developers to build, run, and deploy full-stack applications without leaving the browser. | |
| By leveraging advanced AI models, Bolty turns natural language prompts into production-ready code, | |
| <strong className="text-white">Boltly</strong> is a community-driven clone inspired by <em className="text-white">bolt.new</em>. | |
| It empowers developers to build, run, and deploy full-stack applications without leaving the browser. | |
| By leveraging advanced AI models, Boltly turns natural language prompts into production-ready code, |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,80 @@ | ||||||||||||||||||
| import { motion } from 'framer-motion'; | ||||||||||||||||||
|
|
||||||||||||||||||
| // Shadcn-like minimal card with Hover Effect | ||||||||||||||||||
| function FeatureCard({ title, description, className = "" }: any) { | ||||||||||||||||||
|
||||||||||||||||||
| function FeatureCard({ title, description, className = "" }: any) { | |
| interface FeatureCardProps { | |
| title: string; | |
| description: string; | |
| className?: string; | |
| } | |
| function FeatureCard({ title, description, className = "" }: FeatureCardProps) { |
Copilot
AI
Jan 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The word 'secure' should be capitalized at the start of the sentence after the period, or the period should be removed. Currently 'Browser-native Node.js environment. secure' is grammatically incorrect.
| description: "Browser-native Node.js environment. secure, fast, and sandboxed execution." | |
| description: "Browser-native Node.js environment. Secure, fast, and sandboxed execution." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Capitalization inconsistency.
Line 39: "secure" should be capitalized to "Secure" to match the sentence structure ("Browser-native Node.js environment. Secure, fast, and sandboxed execution.").
Suggested fix
{
title: "WebContainers",
- description: "Browser-native Node.js environment. secure, fast, and sandboxed execution."
+ description: "Browser-native Node.js environment. Secure, fast, and sandboxed execution."
},📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| { | |
| title: "WebContainers", | |
| description: "Browser-native Node.js environment. secure, fast, and sandboxed execution." | |
| }, | |
| { | |
| title: "WebContainers", | |
| description: "Browser-native Node.js environment. Secure, fast, and sandboxed execution." | |
| }, |
🤖 Prompt for AI Agents
In `@frontend/src/components/landing/Features.tsx` around lines 37 - 40, The
description string for the "WebContainers" feature has inconsistent
capitalization ("secure" should be "Secure"); locate the feature object where
title is "WebContainers" and update the description value from "Browser-native
Node.js environment. secure, fast, and sandboxed execution." to "Browser-native
Node.js environment. Secure, fast, and sandboxed execution." so the sentence
casing is consistent.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
and this
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@hackice20 Sounds good! Thanks for confirming you'll address this capitalization issue as well. 👍
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,26 @@ | ||||||
| // Footer component with simple links | ||||||
|
|
||||||
| export function Footer() { | ||||||
| return ( | ||||||
| <footer className="py-12 px-6 bg-zinc-950 border-t border-zinc-900"> | ||||||
| <div className="max-w-7xl mx-auto flex flex-col md:flex-row justify-between items-center gap-6"> | ||||||
| <div className="flex items-center gap-2"> | ||||||
| {/* Logo placeholder - using text for now if logo component isnt available in scope easily, | ||||||
| but we can use the same svg from Home if we want or just text */} | ||||||
| <span className="text-xl font-bold text-white tracking-tight">Boltly</span> | ||||||
| <span className="px-2 py-0.5 rounded-full bg-zinc-800 text-xs text-zinc-400">v1.0.0</span> | ||||||
| </div> | ||||||
|
|
||||||
| <div className="flex items-center gap-8 text-sm text-zinc-500"> | ||||||
| <a href="https://github.com/hackice20/boltly" target="_blank" rel="noreferrer" className="hover:text-white transition-colors">GitHub</a> | ||||||
| <a href="#" className="hover:text-white transition-colors">License</a> | ||||||
| <a href="#" className="hover:text-white transition-colors">Privacy</a> | ||||||
|
Comment on lines
+16
to
+17
|
||||||
| <a href="#" className="hover:text-white transition-colors">License</a> | |
| <a href="#" className="hover:text-white transition-colors">Privacy</a> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,108 @@ | ||
| import { useNavigate } from 'react-router-dom'; | ||
| import { motion } from 'framer-motion'; | ||
| import { ArrowRight, Terminal } from 'lucide-react'; | ||
|
|
||
| export function Hero() { | ||
| const navigate = useNavigate(); | ||
|
|
||
| return ( | ||
| <section className="relative pt-32 pb-40 px-6 overflow-hidden flex flex-col items-center justify-center min-h-[90vh]"> | ||
|
|
||
| {/* Mesh Gradient Background */} | ||
| <div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[500px] opacity-30 pointer-events-none"> | ||
| <div className="w-full h-full aurora-gradient rounded-full blur-[100px] animate-aurora"></div> | ||
| </div> | ||
|
|
||
| <div className="relative z-10 max-w-5xl mx-auto text-center space-y-10"> | ||
|
|
||
| {/* Badge */} | ||
| <motion.div | ||
| initial={{ opacity: 0, y: 10 }} | ||
| animate={{ opacity: 1, y: 0 }} | ||
| className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-white/5 border border-white/10 text-sm text-zinc-400 backdrop-blur-md" | ||
| > | ||
| <span className="w-2 h-2 rounded-full bg-electric-500 animate-pulse"></span> | ||
| <span>v1.0 Now Public</span> | ||
| </motion.div> | ||
|
|
||
| {/* Headline */} | ||
| <motion.h1 | ||
| initial={{ opacity: 0, scale: 0.95 }} | ||
| animate={{ opacity: 1, scale: 1 }} | ||
| transition={{ duration: 0.5 }} | ||
| className="text-6xl md:text-8xl font-bold tracking-tight text-white leading-[1.1]" | ||
| > | ||
| Build apps at the <br /> | ||
| <span className="text-zinc-500">speed of thought.</span> | ||
| </motion.h1> | ||
|
|
||
| {/* Subheadline */} | ||
| <motion.p | ||
| initial={{ opacity: 0, y: 20 }} | ||
| animate={{ opacity: 1, y: 0 }} | ||
| transition={{ delay: 0.2 }} | ||
| className="text-xl text-zinc-400 max-w-2xl mx-auto leading-relaxed" | ||
| > | ||
| The open-source AI web builder. Prompt, generate, and deploy full-stack React & Node.js apps directly from your browser. | ||
| </motion.p> | ||
|
|
||
| {/* CTAs */} | ||
| <motion.div | ||
| initial={{ opacity: 0, y: 20 }} | ||
| animate={{ opacity: 1, y: 0 }} | ||
| transition={{ delay: 0.3 }} | ||
| className="flex flex-col sm:flex-row items-center justify-center gap-4" | ||
| > | ||
| <button | ||
| onClick={() => navigate('/builder')} | ||
| className="group flex items-center gap-2 bg-white text-zinc-950 px-8 py-4 rounded-full text-lg font-bold hover:bg-zinc-200 transition-all hover:scale-105" | ||
| > | ||
| Start Building | ||
| <ArrowRight className="w-5 h-5 group-hover:translate-x-1 transition-transform" /> | ||
| </button> | ||
| <a | ||
| href="https://github.com/hackice20/boltly" | ||
| target="_blank" | ||
| rel="noreferrer" | ||
| className="flex items-center gap-2 px-8 py-4 rounded-full border border-zinc-800 bg-zinc-900/50 text-white hover:bg-zinc-900 transition-all hover:border-zinc-700" | ||
| > | ||
| <Terminal className="w-5 h-5 text-zinc-500" /> | ||
| <span>Documentation</span> | ||
| </a> | ||
| </motion.div> | ||
|
|
||
| {/* Floating Code Preview (Subtle) */} | ||
| <motion.div | ||
| initial={{ opacity: 0, y: 40 }} | ||
| animate={{ opacity: 1, y: 0 }} | ||
| transition={{ delay: 0.5, duration: 0.8 }} | ||
| className="mt-12 mx-auto max-w-4xl" | ||
| > | ||
| <div className="rounded-xl border border-white/10 bg-zinc-950/80 backdrop-blur-xl shadow-2xl p-2"> | ||
| <div className="flex items-center gap-2 px-4 py-2 border-b border-white/5 bg-white/5 rounded-t-lg"> | ||
| <div className="flex gap-1.5"> | ||
| <div className="w-3 h-3 rounded-full bg-red-500/50"></div> | ||
| <div className="w-3 h-3 rounded-full bg-yellow-500/50"></div> | ||
| <div className="w-3 h-3 rounded-full bg-green-500/50"></div> | ||
| </div> | ||
| <div className="ml-4 text-xs text-zinc-500 font-mono">terminal — boltly-cli</div> | ||
| </div> | ||
| <div className="p-6 font-mono text-sm text-zinc-400 text-left"> | ||
| <div className="flex gap-2"> | ||
| <span className="text-electric-500">$</span> | ||
| <span className="text-white">boltly create</span> | ||
| <span className="text-zinc-500">"a personal portfolio with a blog"</span> | ||
| </div> | ||
| <div className="mt-2 text-zinc-500"> | ||
| Analyzing requirements... <span className="text-green-500">Done</span><br /> | ||
| Generating database schema... <span className="text-green-500">Done</span><br /> | ||
| Scaffolding Next.js project... <span className="text-green-500">Done</span><br /> | ||
| <span className="text-white mt-2 block">Application ready at http://localhost:3000 🚀</span> | ||
| </div> | ||
|
Comment on lines
+90
to
+101
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Minor content inconsistency in code preview. The code preview references "Scaffolding Next.js project" (Line 99), but the hero subheadline (Line 46) describes "React & Node.js apps". Consider aligning these for consistency, or this may confuse users about what framework the tool actually generates. 🤖 Prompt for AI Agents |
||
| </div> | ||
| </div> | ||
| </motion.div> | ||
| </div> | ||
| </section> | ||
| ); | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,69 @@ | ||
| import { motion } from 'framer-motion'; | ||
| import { MessageSquare, Zap, PenTool, Play } from 'lucide-react'; | ||
|
|
||
| const steps = [ | ||
| { | ||
| icon: <MessageSquare className="w-6 h-6 text-white" />, | ||
| title: "1. Prompt", | ||
| description: "Describe your application idea in natural language." | ||
| }, | ||
| { | ||
| icon: <Zap className="w-6 h-6 text-white" />, | ||
| title: "2. Generate", | ||
| description: "AI architects the structure and writes the initial code." | ||
| }, | ||
| { | ||
| icon: <PenTool className="w-6 h-6 text-white" />, | ||
| title: "3. Edit", | ||
| description: "Refine definitions or edit code manually in the browser." | ||
| }, | ||
| { | ||
| icon: <Play className="w-6 h-6 text-white" />, | ||
| title: "4. Run", | ||
| description: "Instantly deploy a live preview of your full-stack app." | ||
| } | ||
| ]; | ||
|
|
||
| export function HowItWorks() { | ||
| return ( | ||
| <section className="py-24 px-6 bg-zinc-950 relative overflow-hidden"> | ||
| {/* Background Decor */} | ||
| <div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[300px] bg-electric-900/20 blur-[100px] rounded-full pointer-events-none" /> | ||
|
|
||
| <div className="max-w-7xl mx-auto relative z-10"> | ||
| <div className="text-center mb-20"> | ||
| <h2 className="text-3xl md:text-5xl font-bold text-white mb-6"> | ||
| From idea to deployment <br /> | ||
| <span className="text-neon-400">in four simple steps.</span> | ||
| </h2> | ||
| </div> | ||
|
|
||
| <div className="grid md:grid-cols-4 gap-8 relative"> | ||
| {/* Connecting Line (Desktop) */} | ||
| <div className="hidden md:block absolute top-[2.5rem] left-0 right-0 h-0.5 bg-gradient-to-r from-zinc-800 via-electric-900 to-zinc-800 -z-10" /> | ||
|
|
||
| {steps.map((step, i) => ( | ||
| <motion.div | ||
| key={i} | ||
| initial={{ opacity: 0, y: 20 }} | ||
| whileInView={{ opacity: 1, y: 0 }} | ||
| viewport={{ once: true }} | ||
| transition={{ delay: i * 0.2 }} | ||
| className="relative flex flex-col items-center text-center" | ||
| > | ||
| <div className="w-20 h-20 rounded-2xl bg-zinc-900 border border-zinc-800 flex items-center justify-center mb-6 shadow-lg shadow-black/50 z-10"> | ||
| <div className="p-3 bg-electric-600 rounded-lg"> | ||
| {step.icon} | ||
| </div> | ||
| </div> | ||
| <h3 className="text-xl font-bold text-white mb-3">{step.title}</h3> | ||
| <p className="text-zinc-400 text-sm leading-relaxed max-w-[200px]"> | ||
| {step.description} | ||
| </p> | ||
| </motion.div> | ||
| ))} | ||
| </div> | ||
| </div> | ||
| </section> | ||
| ); | ||
| } |
| Original file line number | Diff line number | Diff line change | ||
|---|---|---|---|---|
| @@ -0,0 +1,40 @@ | ||||
| import { Github, Zap } from 'lucide-react'; | ||||
| import { motion } from 'framer-motion'; | ||||
|
||||
| import { motion } from 'framer-motion'; |
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistent product name: "Bolty" vs "Boltly".
The text here uses "Bolty" but the component name (
WhyBoltly) and other references use "Boltly". Please verify the correct product name and update for consistency.Suggested fix (if "Boltly" is correct)
📝 Committable suggestion
🤖 Prompt for AI Agents
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix this @Tejas1771
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.