Skip to content

Commit ac45583

Browse files
committed
feat: add IconLogo feature with routing, page, and navigation updates
1 parent 7c59bfe commit ac45583

7 files changed

Lines changed: 92 additions & 3 deletions

File tree

next.config.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
import type { NextConfig } from "next";
22

33
const nextConfig: NextConfig = {
4+
async rewrites() {
5+
if (process.env.NODE_ENV !== "development") {
6+
return [];
7+
}
8+
9+
return [
10+
{
11+
source: "/iconlogo-app/:path*",
12+
destination: "http://127.0.0.1:5173/:path*",
13+
},
14+
];
15+
},
16+
417
async headers() {
518
return [
619
{

src/app/iconlogo/page.tsx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import type { Metadata } from "next";
2+
import TopNavbar from "@/components/TopNavbar";
3+
4+
export const metadata: Metadata = {
5+
title: "IconLogo Studio | RemoveBanana",
6+
description:
7+
"Create icon-based logos with the integrated IconLogo studio. Launch the cloned iconlogo app directly inside RemoveBanana.",
8+
};
9+
10+
export default function IconLogoPage() {
11+
const iframeSrc =
12+
process.env.NODE_ENV === "development"
13+
? "http://127.0.0.1:5173"
14+
: process.env.NEXT_PUBLIC_ICONLOGO_URL;
15+
16+
return (
17+
<main className="min-h-screen bg-black text-white overflow-hidden">
18+
<TopNavbar />
19+
20+
{iframeSrc ? (
21+
<iframe
22+
src={iframeSrc}
23+
title="IconLogo Studio"
24+
className="block w-full h-screen pt-14 md:pt-16 border-0"
25+
allow="clipboard-read; clipboard-write"
26+
/>
27+
) : (
28+
<section className="pt-32 px-6">
29+
<div className="max-w-3xl mx-auto rounded-2xl border border-amber-400/20 bg-amber-500/5 p-6 text-amber-100/90">
30+
<p className="text-base font-semibold">IconLogo deployment URL is not configured.</p>
31+
<p className="mt-2 text-sm text-amber-100/70">
32+
Set NEXT_PUBLIC_ICONLOGO_URL to your deployed IconLogo app URL.
33+
</p>
34+
</div>
35+
</section>
36+
)}
37+
38+
</main>
39+
);
40+
}

src/app/page.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
"use client";
22

33
import Link from "next/link";
4-
import Image from "next/image";
54
import { motion } from "framer-motion";
6-
import { Image as ImageIcon, Video, Eraser, Brain, QrCode, Sparkles } from "lucide-react";
5+
import { Image as ImageIcon, Video, Eraser, Brain, QrCode, Shapes } from "lucide-react";
76
import TopNavbar from "@/components/TopNavbar";
87
import Footer from "@/components/Footer";
98
import Loader from "@/components/Loader";
@@ -45,6 +44,13 @@ const tools = [
4544
href: "/qr-code-generator",
4645
color: "from-cyan-600 to-blue-500",
4746
},
47+
{
48+
name: "IconLogo",
49+
description: "Create icon-based logos with a full studio workflow and quick exports.",
50+
icon: Shapes,
51+
href: "/iconlogo",
52+
color: "from-orange-600 to-amber-500",
53+
},
4854
];
4955

5056
export default function LandingPage() {

src/app/sitemap.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ export default function sitemap(): MetadataRoute.Sitemap {
4141
changeFrequency: "weekly",
4242
priority: 0.9,
4343
},
44+
{
45+
url: `${baseUrl}/iconlogo`,
46+
lastModified,
47+
changeFrequency: "weekly",
48+
priority: 0.9,
49+
},
4450
{
4551
url: `${baseUrl}/about`,
4652
lastModified,

src/app/svg-logo-editor/page.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { redirect } from "next/navigation";
2+
3+
export default function LegacySvgLogoEditorPage() {
4+
redirect("/iconlogo");
5+
}

src/components/Footer.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ export default function Footer() {
3939
QR Generator
4040
</Link>
4141
</li>
42+
<li>
43+
<Link href="/iconlogo" className="hover:text-white transition-colors">
44+
IconLogo
45+
</Link>
46+
</li>
4247
</ul>
4348
</div>
4449

src/components/TopNavbar.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import Link from "next/link";
44
import Image from "next/image";
55
import { usePathname } from "next/navigation";
6-
import { Image as ImageIcon, Video, Eraser, Github, Twitter, Brain, House, QrCode } from "lucide-react";
6+
import { Image as ImageIcon, Video, Eraser, Github, Twitter, Brain, House, QrCode, Shapes } from "lucide-react";
77

88
export default function TopNavbar() {
99
const pathname = usePathname();
@@ -14,6 +14,7 @@ export default function TopNavbar() {
1414
const isBackgroundPage = pathname === "/background-remover";
1515
const isAIDetectorPage = pathname === "/ai-image-detector";
1616
const isQrCodePage = pathname === "/qr-code-generator";
17+
const isIconLogoPage = pathname === "/iconlogo";
1718

1819
return (
1920
<nav
@@ -133,6 +134,19 @@ export default function TopNavbar() {
133134
<QrCode className="w-5 h-5" />
134135
<span className="hidden sm:inline">QR Generator</span>
135136
</Link>
137+
138+
<Link
139+
href="/iconlogo"
140+
aria-label="IconLogo"
141+
aria-current={isIconLogoPage ? "page" : undefined}
142+
className={`relative flex items-center justify-center gap-2 px-3 sm:px-5 py-2.5 rounded-xl text-sm transition-all duration-300 whitespace-nowrap ${isIconLogoPage
143+
? "text-white shadow-lg bg-gradient-to-r from-orange-600 to-amber-500"
144+
: "text-gray-400 hover:text-gray-200 hover:bg-white/5"
145+
}`}
146+
>
147+
<Shapes className="w-5 h-5" />
148+
<span className="hidden sm:inline">IconLogo</span>
149+
</Link>
136150
</div>
137151
)}
138152

0 commit comments

Comments
 (0)