Skip to content

Commit c1b65fd

Browse files
committed
feat
1 parent 615fd39 commit c1b65fd

File tree

16 files changed

+923
-159
lines changed

16 files changed

+923
-159
lines changed

package-lock.json

Lines changed: 402 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"qrcode.react": "^4.2.0",
1919
"react": "^19.2.0",
2020
"react-dom": "^19.2.0",
21+
"react-force-graph-3d": "^1.29.0",
2122
"react-icons": "^5.5.0",
2223
"react-markdown": "^10.1.0",
2324
"react-router-dom": "^7.9.4",
29.9 KB
Loading

public/posts/posts.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
[
2+
{
3+
"slug": "building-the-knowledge-graph",
4+
"title": "Building the Knowledge Graph: Visualizing Fezcodex in 3D",
5+
"date": "2025-12-21",
6+
"updated": "2025-12-21",
7+
"description": "A technical deep dive into how I built the 3D 'Neural Net' graph visualization using React, Three.js, and force-directed graph theory.",
8+
"tags": ["React", "Three.js", "Data Visualization", "Graph Theory", "UI/UX"],
9+
"category": "dev",
10+
"filename": "building-the-knowledge-graph.txt",
11+
"authors": ["fezcode"],
12+
"image": "/images/asset/ogtitle.png"
13+
},
214
{
315
"slug": "routing-revolution-ssg-and-seo",
416
"title": "Routing Revolution: SSG, BrowserRouter, and the SEO Fix",

public/roadmap/roadmap.piml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,15 +175,15 @@
175175
(id) FEZ-16
176176
(title) Knowledge Graph Visualization Protocol
177177
(description)
178-
A visual 'brain' for Fezcodex. Every single blog post, app, and log will be a node in a 3D interactive map.
178+
A visual 'brain' for Fezcodex. Every single blog post, app, and log is a node in a 3D interactive map.
179179
Nodes are connected by shared tags (e.g., 'React' or 'Horror'). Users can spin, zoom, and click nodes to travel
180180
through the site's logic instead of using standard menus.
181181
(category) Discovery
182182
(epic) OS Experience
183-
(status) Planned
183+
(status) Completed
184184
(priority) Medium
185185
(created_at) 2025-12-21T18:00:00+03:00
186-
(notes) Clicking a node should show a preview tooltip with the thumbnail and summary.
186+
(notes) Clicking a node navigates to the content. Implemented using react-force-graph-3d.
187187

188188
> (issues)
189189
(id) FEZ-17

public/rss.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
<link>https://fezcode.com</link>
1010
</image>
1111
<generator>RSS for Node</generator>
12-
<lastBuildDate>Sun, 21 Dec 2025 13:50:49 GMT</lastBuildDate>
12+
<lastBuildDate>Sun, 21 Dec 2025 15:44:47 GMT</lastBuildDate>
1313
<atom:link href="https://fezcode.com/rss.xml" rel="self" type="application/rss+xml"/>
14-
<pubDate>Sun, 21 Dec 2025 13:50:49 GMT</pubDate>
14+
<pubDate>Sun, 21 Dec 2025 15:44:47 GMT</pubDate>
1515
<copyright><![CDATA[2025 Ahmed Samil Bulbul]]></copyright>
1616
<language><![CDATA[en]]></language>
1717
<managingEditor><![CDATA[samil.bulbul@gmail.com (Ahmed Samil Bulbul)]]></managingEditor>

public/sitemap.xml

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,55 +2,55 @@
22
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
33
<url>
44
<loc>https://fezcode.com/</loc>
5-
<lastmod>2025-12-21T13:50:49.984Z</lastmod>
5+
<lastmod>2025-12-21T15:44:48.244Z</lastmod>
66
<changefreq>monthly</changefreq>
77
<priority>1.0</priority>
88
</url>
99
<url>
1010
<loc>https://fezcode.com/about</loc>
11-
<lastmod>2025-12-21T13:50:49.986Z</lastmod>
11+
<lastmod>2025-12-21T15:44:48.245Z</lastmod>
1212
<changefreq>monthly</changefreq>
1313
<priority>0.8</priority>
1414
</url>
1515
<url>
1616
<loc>https://fezcode.com/blog</loc>
17-
<lastmod>2025-12-21T13:50:49.986Z</lastmod>
17+
<lastmod>2025-12-21T15:44:48.245Z</lastmod>
1818
<changefreq>monthly</changefreq>
1919
<priority>0.8</priority>
2020
</url>
2121
<url>
2222
<loc>https://fezcode.com/projects</loc>
23-
<lastmod>2025-12-21T13:50:49.986Z</lastmod>
23+
<lastmod>2025-12-21T15:44:48.245Z</lastmod>
2424
<changefreq>monthly</changefreq>
2525
<priority>0.8</priority>
2626
</url>
2727
<url>
2828
<loc>https://fezcode.com/logs</loc>
29-
<lastmod>2025-12-21T13:50:49.986Z</lastmod>
29+
<lastmod>2025-12-21T15:44:48.245Z</lastmod>
3030
<changefreq>monthly</changefreq>
3131
<priority>0.8</priority>
3232
</url>
3333
<url>
3434
<loc>https://fezcode.com/stories</loc>
35-
<lastmod>2025-12-21T13:50:49.986Z</lastmod>
35+
<lastmod>2025-12-21T15:44:48.245Z</lastmod>
3636
<changefreq>monthly</changefreq>
3737
<priority>0.8</priority>
3838
</url>
3939
<url>
4040
<loc>https://fezcode.com/settings</loc>
41-
<lastmod>2025-12-21T13:50:49.986Z</lastmod>
41+
<lastmod>2025-12-21T15:44:48.245Z</lastmod>
4242
<changefreq>monthly</changefreq>
4343
<priority>0.8</priority>
4444
</url>
4545
<url>
4646
<loc>https://fezcode.com/apps</loc>
47-
<lastmod>2025-12-21T13:50:49.986Z</lastmod>
47+
<lastmod>2025-12-21T15:44:48.245Z</lastmod>
4848
<changefreq>monthly</changefreq>
4949
<priority>0.8</priority>
5050
</url>
5151
<url>
5252
<loc>https://fezcode.com/stories/lore</loc>
53-
<lastmod>2025-12-21T13:50:49.986Z</lastmod>
53+
<lastmod>2025-12-21T15:44:48.245Z</lastmod>
5454
<changefreq>monthly</changefreq>
5555
<priority>0.8</priority>
5656
</url>
@@ -1028,79 +1028,79 @@
10281028
</url>
10291029
<url>
10301030
<loc>https://fezcode.com/stories/books/1</loc>
1031-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1031+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
10321032
<changefreq>monthly</changefreq>
10331033
<priority>0.6</priority>
10341034
</url>
10351035
<url>
10361036
<loc>https://fezcode.com/stories/books/1/pages/1</loc>
1037-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1037+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
10381038
<changefreq>weekly</changefreq>
10391039
<priority>0.5</priority>
10401040
</url>
10411041
<url>
10421042
<loc>https://fezcode.com/stories/books/2</loc>
1043-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1043+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
10441044
<changefreq>monthly</changefreq>
10451045
<priority>0.6</priority>
10461046
</url>
10471047
<url>
10481048
<loc>https://fezcode.com/stories/books/2/pages/1</loc>
1049-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1049+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
10501050
<changefreq>weekly</changefreq>
10511051
<priority>0.5</priority>
10521052
</url>
10531053
<url>
10541054
<loc>https://fezcode.com/stories/books/3</loc>
1055-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1055+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
10561056
<changefreq>monthly</changefreq>
10571057
<priority>0.6</priority>
10581058
</url>
10591059
<url>
10601060
<loc>https://fezcode.com/stories/books/3/pages/1</loc>
1061-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1061+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
10621062
<changefreq>weekly</changefreq>
10631063
<priority>0.5</priority>
10641064
</url>
10651065
<url>
10661066
<loc>https://fezcode.com/stories/books/3/pages/2</loc>
1067-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1067+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
10681068
<changefreq>weekly</changefreq>
10691069
<priority>0.5</priority>
10701070
</url>
10711071
<url>
10721072
<loc>https://fezcode.com/stories/books/4</loc>
1073-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1073+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
10741074
<changefreq>monthly</changefreq>
10751075
<priority>0.6</priority>
10761076
</url>
10771077
<url>
10781078
<loc>https://fezcode.com/stories/books/4/pages/1</loc>
1079-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1079+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
10801080
<changefreq>weekly</changefreq>
10811081
<priority>0.5</priority>
10821082
</url>
10831083
<url>
10841084
<loc>https://fezcode.com/stories/books/4/pages/2</loc>
1085-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1085+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
10861086
<changefreq>weekly</changefreq>
10871087
<priority>0.5</priority>
10881088
</url>
10891089
<url>
10901090
<loc>https://fezcode.com/stories/books/5</loc>
1091-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1091+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
10921092
<changefreq>monthly</changefreq>
10931093
<priority>0.6</priority>
10941094
</url>
10951095
<url>
10961096
<loc>https://fezcode.com/stories/books/5/pages/1</loc>
1097-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1097+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
10981098
<changefreq>weekly</changefreq>
10991099
<priority>0.5</priority>
11001100
</url>
11011101
<url>
11021102
<loc>https://fezcode.com/stories/books/5/pages/2</loc>
1103-
<lastmod>2025-12-21T13:50:49.996Z</lastmod>
1103+
<lastmod>2025-12-21T15:44:48.253Z</lastmod>
11041104
<changefreq>weekly</changefreq>
11051105
<priority>0.5</priority>
11061106
</url>

public/timeline/timeline.json

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1-
[
2-
{
3-
"date": "2025-12-19",
1+
"items": [
2+
{
3+
"date": "2025-12-21",
4+
"title": "Neural Net Online",
5+
"description": "Deployed the 3D Knowledge Graph Visualization Protocol (/graph). Now users can navigate the site via an interactive neural network.",
6+
"type": "feature",
7+
"icon": "Graph"
8+
},
9+
{
10+
"date": "2025-12-21",
411
"title": "Brutalist Fezcodex: Major Refactor",
512
"description": "Executed a sweeping architectural and aesthetic refactor. Introduced high-contrast brutalist layouts, immersive hero sections with real-time generative art, and a massive codebase sanitization. Overhauled the Timeline and Memory Game components to match the new digital-first identity.",
613
"type": "refactor",

src/components/AnimatedRoutes.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ const CommandsPage = lazy(() => import('../pages/CommandsPage'));
162162
const AchievementsPage = lazy(() => import('../pages/AchievementsPage'));
163163
const SitemapPage = lazy(() => import('../pages/SitemapPage'));
164164
const WelcomePage = lazy(() => import('../pages/WelcomePage'));
165+
const KnowledgeGraphPage = lazy(() => import('../pages/KnowledgeGraphPage'));
165166
const VocabRouteHandler = lazy(() => import('../components/VocabRouteHandler'));
166167

167168
const pageVariants = {
@@ -627,6 +628,22 @@ const AnimatedRoutes = ({
627628
</motion.div>
628629
}
629630
/>
631+
<Route
632+
path="/graph"
633+
element={
634+
<motion.div
635+
initial="initial"
636+
animate="in"
637+
exit="out"
638+
variants={pageVariants}
639+
transition={pageTransition}
640+
>
641+
<Suspense fallback={<Loading />}>
642+
<KnowledgeGraphPage />
643+
</Suspense>
644+
</motion.div>
645+
}
646+
/>
630647
{/* Hardcoded redirects for fc::apps:: paths */}
631648
<Route
632649
path="/apps::pinned"

src/components/BrutalistSidebar.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
Rss,
2222
CaretDoubleDown,
2323
CaretDoubleUp,
24+
Graph,
2425
} from '@phosphor-icons/react';
2526

2627
import { version } from '../version';
@@ -306,6 +307,12 @@ const BrutalistSidebar = ({
306307
/>
307308
{sidebarState.isExtrasOpen && (
308309
<nav className="flex flex-col">
310+
<SidebarLink
311+
to="/graph"
312+
icon={Graph}
313+
label="Neural Net"
314+
getLinkClass={getLinkClass}
315+
/>
309316
<SidebarLink
310317
to="/stories"
311318
icon={Sword}

0 commit comments

Comments
 (0)