Skip to content

Commit 831e492

Browse files
committed
feat: Implement core UI components, content management infrastructure, and a new landing page.
1 parent b411cfe commit 831e492

7 files changed

Lines changed: 706 additions & 324 deletions

File tree

src/App.jsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import TutorialDetail from './pages/TutorialDetail' // Individual tutorial view
1616
import DynamicPage from './pages/DynamicPage' // CMS-driven dynamic pages
1717
import PostDetail from './pages/PostDetail' // Individual blog post view
1818
import AdminDashboard from './pages/AdminDashboard' // Admin control panel
19+
import LandingPage from './pages/LandingPage' // New IT Landing Page
20+
1921
function App() {
2022
return (
2123
<ErrorBoundary>
@@ -30,6 +32,14 @@ function App() {
3032
<Routes>
3133
<Route
3234
path="/"
35+
element={
36+
<ErrorBoundary>
37+
<LandingPage />
38+
</ErrorBoundary>
39+
}
40+
/>
41+
<Route
42+
path="/blog"
3343
element={
3444
<ErrorBoundary>
3545
<Header />
@@ -93,9 +103,7 @@ function App() {
93103
path="*"
94104
element={
95105
<ErrorBoundary>
96-
<Header />
97-
<Home />
98-
<Footer />
106+
<LandingPage />
99107
</ErrorBoundary>
100108
}
101109
/>

src/components/Footer.jsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -220,22 +220,22 @@ const Footer = () => {
220220
<footer className="bg-gray-900 text-gray-300 py-12">
221221
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
222222
<div className="grid grid-cols-1 md:grid-cols-3 gap-8 mb-8">
223-
{}
223+
{ }
224224
<div>
225225
<div className="flex items-center space-x-3 mb-4">
226226
<div className="bg-gradient-to-r from-primary-600 to-primary-800 p-2 rounded-lg">
227227
<BrandIcon className="w-6 h-6 text-white" />
228228
</div>
229229
<span className="text-xl font-bold text-white">
230-
{footerContent?.brand?.title || footerContent?.brand?.name || 'Linux Tutorial'}
230+
{footerContent?.brand?.title || footerContent?.brand?.name || 'IT Portal'}
231231
</span>
232232
</div>
233233
<p className="text-gray-400">
234234
{footerContent?.brand?.description ||
235-
'Dein umfassendes Tutorial für Linux - von den Basics bis zu Advanced Techniken.'}
235+
'Dein Portal für IT Security, Programmierung und Administration.'}
236236
</p>
237237
</div>
238-
{}
238+
{ }
239239
<div>
240240
<h4 className="text-white font-semibold mb-4">Quick Links</h4>
241241
<ul className="space-y-2">
@@ -263,7 +263,7 @@ const Footer = () => {
263263
)}
264264
</ul>
265265
</div>
266-
{}
266+
{ }
267267
<div>
268268
<h4 className="text-white font-semibold mb-4">Kontakt</h4>
269269
<div className="space-y-3">
@@ -303,10 +303,10 @@ const Footer = () => {
303303
</div>
304304
</div>
305305
</div>
306-
{}
306+
{ }
307307
<div className="border-t border-gray-800 pt-8 flex flex-col md:flex-row justify-between items-center">
308308
<p className="text-gray-400 text-sm mb-4 md:mb-0">
309-
{(footerContent?.bottom?.copyright || '© {year} Linux Tutorial. Alle Rechte vorbehalten.').replace(
309+
{(footerContent?.bottom?.copyright || '© {year} IT Portal. Alle Rechte vorbehalten.').replace(
310310
'{year}',
311311
currentYear,
312312
)}
@@ -319,7 +319,7 @@ const Footer = () => {
319319
<div className="flex items-center space-x-1 text-sm">
320320
<span className="text-gray-400">Gemacht mit</span>
321321
<Heart className="w-4 h-4 text-red-500 fill-red-500" />
322-
<span className="text-gray-400">für die Linux Community</span>
322+
<span className="text-gray-400">für IT Professionals</span>
323323
</div>
324324
)}
325325
</div>

src/components/Header.jsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import ThemeToggle from './ThemeToggle'
1111
import SearchBar from './SearchBar'
1212
const FALLBACK_NAV_ITEMS = [
1313
{ id: 'home', label: 'Home', type: 'section' },
14-
{ id: 'grundlagen', label: 'Grundlagen', type: 'route', path: '/grundlagen' },
14+
{ id: 'blog', label: 'Blog', type: 'route', path: '/blog' },
1515
]
1616
const Header = () => {
1717
const [mobileMenuOpen, setMobileMenuOpen] = useState(false)
@@ -163,7 +163,7 @@ const Header = () => {
163163
<header className="bg-white/80 dark:bg-gray-900/80 backdrop-blur-xl shadow-soft sticky top-0 z-50 border-b border-gray-100/50 dark:border-gray-800/50">
164164
<nav className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
165165
<div className="flex justify-between items-center h-20">
166-
{}
166+
{ }
167167
<a
168168
href="/"
169169
onClick={handleBrandClick}
@@ -174,10 +174,10 @@ const Header = () => {
174174
<BrandIcon className="w-6 h-6" />
175175
</div>
176176
<span className="text-xl font-semibold text-gray-900 dark:text-gray-100">
177-
{headerContent?.brand?.name || 'Linux Tutorial'}
177+
{headerContent?.brand?.name || 'IT Portal'}
178178
</span>
179179
</a>
180-
{}
180+
{ }
181181
<div className="hidden md:flex items-center space-x-8">
182182
{computedNavItems.map((item, index) => {
183183
const href = getNavHref(item)
@@ -215,7 +215,7 @@ const Header = () => {
215215
<span>{isAuthenticated ? ctaContent.authLabel || 'Admin' : ctaContent.guestLabel || 'Login'}</span>
216216
</button>
217217
</div>
218-
{}
218+
{ }
219219
<div className="md:hidden flex items-center space-x-2">
220220
<button
221221
onClick={() => setSearchOpen(true)}

0 commit comments

Comments
 (0)