-
- $ better-t.stack
+
+ Better-T Stack
-
- The ultimate TypeScript scaffolding tool for modern web
+
+ Type-safe, modern TypeScript scaffolding for full-stack web
development
+
+
+
-
- $ links
+
+ Resources
-
+
- - GitHub
+ GitHub Repository
- - NPM
+ NPM Package
+
+
+
+
+ Demo Application
{/*
- - Documentation
+ Documentation
*/}
+
-
- $ {" "}
- contact
+
+ Contact
-
- echo {" "}
- "amanvarshney.work@gmail.com"
-
+
+
+
+ $
+
+ amanvarshney.work@gmail.com
+
+
+ Have questions or feedback? Feel free to reach out or open an
+ issue on GitHub.
+
+
-
-
+
+
+
© {new Date().getFullYear()} Better-T Stack. All rights reserved.
-
- Made with TypeScript ♥
+
+ Built with
+
+ TypeScript
+
diff --git a/apps/web/src/app/(home)/_components/Navbar.tsx b/apps/web/src/app/(home)/_components/Navbar.tsx
index 648bb98..e6de367 100644
--- a/apps/web/src/app/(home)/_components/Navbar.tsx
+++ b/apps/web/src/app/(home)/_components/Navbar.tsx
@@ -1,5 +1,5 @@
"use client";
-import { Github } from "lucide-react";
+import { Github, Menu, X } from "lucide-react";
import Link from "next/link";
import { useEffect, useRef, useState } from "react";
import PackageIcon from "./Icons";
@@ -8,6 +8,7 @@ const Navbar = () => {
const [activeLink, setActiveLink] = useState("home");
const [bgStyles, setBgStyles] = useState({});
const [scrolled, setScrolled] = useState(false);
+ const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
const linkRefs = useRef<{ [key: string]: HTMLAnchorElement | null }>({});
useEffect(() => {
@@ -15,7 +16,7 @@ const Navbar = () => {
const linkElement = linkRefs.current[linkId];
if (linkElement) {
setBgStyles({
- padding: "1rem 0rem",
+ padding: "0.75rem 0rem",
width: `${linkElement.clientWidth - 12}px`,
transform: `translateX(${linkElement.offsetLeft}px)`,
opacity: 1,
@@ -39,152 +40,191 @@ const Navbar = () => {
};
}, [activeLink]);
+ const toggleMobileMenu = () => {
+ setMobileMenuOpen(!mobileMenuOpen);
+ };
+
return (
-
-
+
-
- $_
-
-
- Better-T Stack
-
-
-
-
-
-
{
- linkRefs.current.home = ref;
- }}
- onMouseOver={() => setActiveLink("home")}
- className=" dark:text-gray-300 text-gray-700 dark:hover:text-blue-300 hover:text-blue-600 transition-colors py-2 px-4 rounded-md relative font-mono"
- >
-
~/
- home
-
- {/*
{
- linkRefs.current.github = ref;
- }}
- onMouseOver={() => setActiveLink("github")}
- onMouseLeave={() => setActiveLink("home")}
- className="text-gray-300 hover:text-blue-300 transition-colors py-2 px-4 rounded-md relative flex gap-2 items-center font-mono"
- >
-
{" "}
-
github
- */}
-
{
- linkRefs.current.demo = ref;
- }}
- onMouseOver={() => setActiveLink("demo")}
- onMouseLeave={() => setActiveLink("home")}
- className=" dark:text-gray-300 text-gray-700 hidden dark:hover:text-blue-300 hover:text-blue-600 transition-colors py-2 px-4 rounded-md relative sm:flex gap-2 items-center font-mono"
- >
-
demo
-
-
{
- linkRefs.current.npm = ref;
- }}
- onMouseOver={() => setActiveLink("npm")}
- onMouseLeave={() => setActiveLink("home")}
- className=" dark:text-gray-300 text-gray-700 dark:hover:text-blue-300 hover:text-blue-600 transition-colors py-2 px-4 rounded-md relative flex gap-2 items-center font-mono"
- >
-
{" "}
-
npm
-
+
+ $_
+
+
+ Better-T Stack
+
+
- {/*
- |
- */}
- {/*
-
{
- linkRefs.current.documentation = ref;
- }}
- onMouseOver={() => setActiveLink("documentation")}
- onMouseLeave={() => setActiveLink("home")}
- style={{
- transform: scrolled ? "translateY(0)" : "sm:translateY(-8px)",
- }}
- className={`hover:text-blue-300 text-gray-300 transition-all duration-300 py-2 px-4 rounded-md font-mono ${
- scrolled
- ? "sm:opacity-100 sm:translate-y-0"
- : "sm:opacity-0 sm:pointer-events-none"
+
+
- documentation
-
- */}
+
+
{
+ linkRefs.current.home = ref;
+ }}
+ onMouseOver={() => setActiveLink("home")}
+ className="text-gray-700 dark:text-gray-300 dark:hover:text-blue-300 hover:text-blue-600 transition-colors py-2 px-4 rounded-md relative font-mono"
+ >
+
~/
+ home
+
+
+
{
+ linkRefs.current.demo = ref;
+ }}
+ onMouseOver={() => setActiveLink("demo")}
+ onMouseLeave={() => setActiveLink("home")}
+ className="text-gray-700 dark:text-gray-300 dark:hover:text-blue-300 hover:text-blue-600 transition-colors py-2 px-4 rounded-md relative flex gap-2 items-center font-mono"
+ >
+
demo
+
+
+
{
+ linkRefs.current.npm = ref;
+ }}
+ onMouseOver={() => setActiveLink("npm")}
+ onMouseLeave={() => setActiveLink("home")}
+ className="text-gray-700 dark:text-gray-300 dark:hover:text-blue-300 hover:text-blue-600 transition-colors py-2 px-4 rounded-md relative flex gap-2 items-center font-mono"
+ >
+
{" "}
+
npm
+
+
+
{
+ linkRefs.current.github = ref;
+ }}
+ onMouseOver={() => setActiveLink("github")}
+ onMouseLeave={() => setActiveLink("home")}
+ className={`text-gray-700 dark:text-gray-300 dark:hover:text-blue-300 hover:text-blue-600 transition-colors py-2 px-4 rounded-md relative flex gap-2 items-center font-mono ${
+ scrolled
+ ? "opacity-100 translate-y-0"
+ : "opacity-0 pointer-events-none"
+ }`}
+ >
+
+ GitHub
+ {" "}
+ Github
+
+
+
+
+
{
- linkRefs.current.github = ref;
- }}
- onMouseOver={() => setActiveLink("github")}
- onMouseLeave={() => setActiveLink("home")}
- className={` dark:text-gray-300 text-gray-700 dark:hover:text-blue-300 hover:text-blue-600 transition-colors py-2 px-4 rounded-md relative flex gap-2 items-center font-mono ${
- scrolled
- ? "sm:opacity-100 sm:translate-y-0"
- : "sm:opacity-0 sm:pointer-events-none"
- }`}
+ className="inline-flex items-center backdrop-blur-sm bg-gray-100/90 dark:bg-gray-900/90 rounded-lg border border-gray-200 dark:border-gray-800 py-1 px-4 text-sm font-mono text-gray-700 dark:text-gray-300 hover:text-blue-600 dark:hover:text-blue-300 transition-colors"
>
- Github
+
+ GitHub
+
+ Star on GitHub
-
-
-
-
-
- Github
-
-
-
-
+ {mobileMenuOpen ? (
+
+ ) : (
+
+ )}
+
Toggle menu
+
+
+
+ {mobileMenuOpen && (
+
+
+
setMobileMenuOpen(false)}
+ >
+
~/
+ Home
+
+
+
setMobileMenuOpen(false)}
+ >
+ Demo
+
+
+
setMobileMenuOpen(false)}
+ >
+
+ NPM Package
+
+
+
setMobileMenuOpen(false)}
+ >
+
+ GitHub Repository
+
+
+
+ setMobileMenuOpen(false)}
+ >
+
+ Star on GitHub
+
+
+
+
+ )}
+ >
);
};
diff --git a/apps/web/src/app/(home)/_components/StackArchitech.tsx b/apps/web/src/app/(home)/_components/StackArchitech.tsx
index 0599f91..2967590 100644
--- a/apps/web/src/app/(home)/_components/StackArchitech.tsx
+++ b/apps/web/src/app/(home)/_components/StackArchitech.tsx
@@ -695,7 +695,7 @@ const StackArchitect = () => {
return (
-
+
diff --git a/apps/web/src/app/(home)/layout.tsx b/apps/web/src/app/(home)/layout.tsx
index a71729b..cfdef3a 100644
--- a/apps/web/src/app/(home)/layout.tsx
+++ b/apps/web/src/app/(home)/layout.tsx
@@ -4,15 +4,18 @@ import Footer from "./_components/Footer";
import Navbar from "./_components/Navbar";
export const metadata: Metadata = {
- title: "Better-T-Stack | TypeScript Project Scaffolding",
+ title: "Better-T-Stack",
description:
- "Create modern TypeScript applications with complete type safety from frontend to backend. Features support for multiple databases, ORMs, authentication, and more.",
+ "A modern CLI tool for scaffolding end-to-end type-safe TypeScript projects with best practices and customizable configurations",
keywords: [
"TypeScript",
"project scaffolding",
"type safety",
"Drizzle",
"Prisma",
+ "hono",
+ "elysia",
+ "turborepo",
"libSQL",
"PostgreSQL",
"Better-Auth",
@@ -74,7 +77,7 @@ export const metadata: Metadata = {
export default function Layout({ children }: { children: ReactNode }) {
return (
-
+
{children}
diff --git a/apps/web/src/app/(home)/page.tsx b/apps/web/src/app/(home)/page.tsx
index 2a9ca55..574adb0 100644
--- a/apps/web/src/app/(home)/page.tsx
+++ b/apps/web/src/app/(home)/page.tsx
@@ -1,6 +1,7 @@
"use client";
import ShinyText from "@/app/(home)/_components/ShinyText";
import React from "react";
+import BackgroundGradients from "./_components/BackgroundGradients";
import CodeContainer from "./_components/CodeContainer";
import CustomizableSection from "./_components/CustomizableSection";
import NpmPackage from "./_components/NpmPackage";
@@ -8,80 +9,76 @@ import NpmPackage from "./_components/NpmPackage";
export default function HomePage() {
return (
-
-
-
+
+
+
+
-
-
+
+
Better-T Stack
-
-
-
-
-
-
- Scaffold
- {" "}
-
- production-ready
- {" "}
-
- Better-T projects in seconds
-
+
+
+
+
+
+ A modern CLI tool for scaffolding end-to-end type-safe TypeScript
+ projects with best practices and customizable configurations
-
+
+
+
+
+
+
-
-
+
+
-
-
-
-
- {"{"}
-
-
- {"}"}
-
+
{/*
*/}