From 07412e620d6bff3621d418e71ea370470be7f0aa Mon Sep 17 00:00:00 2001 From: Tudor Stanciu Date: Sun, 5 Oct 2025 17:09:52 +0300 Subject: [PATCH] feat: add external resource links in footer for easy access to documentation, repository, and client libraries --- content/ReleaseNotes.json | 42 +++++++++++++ package-lock.json | 18 ++++-- package.json | 2 +- src/backend/package.json | 2 +- src/frontend/package.json | 3 +- src/frontend/src/App.css | 26 +++++++- src/frontend/src/App.tsx | 8 ++- src/frontend/src/components/ExternalLinks.css | 26 ++++++++ src/frontend/src/components/ExternalLinks.tsx | 63 +++++++++++++++++++ 9 files changed, 179 insertions(+), 11 deletions(-) create mode 100644 src/frontend/src/components/ExternalLinks.css create mode 100644 src/frontend/src/components/ExternalLinks.tsx diff --git a/content/ReleaseNotes.json b/content/ReleaseNotes.json index b4343c8..1d93c93 100644 --- a/content/ReleaseNotes.json +++ b/content/ReleaseNotes.json @@ -1,5 +1,47 @@ { "releases": [ + { + "version": "1.0.2", + "date": "2025-10-05T15:00:00Z", + "title": "External Resources & Links", + "summary": "Added external resource links in the UI footer for easy access to repository, documentation, Docker registry, and client libraries.", + "sections": [ + { + "title": "Overview", + "content": "Version 1.0.2 enhances the user interface by adding quick access links to external resources. Users can now easily navigate to the source code repository, documentation, Docker registry, and official client libraries directly from the application footer." + }, + { + "title": "UI Enhancements", + "items": [ + "**Resource Links Footer** - Added prominent footer section with external resource links", + "**Icon-based Navigation** - Each link includes relevant emoji icon for visual identification", + "**Hover Effects** - Smooth hover animations with background highlight and lift effect", + "**Responsive Layout** - Links wrap gracefully on smaller screens", + "**Clean Design** - Subtle styling that complements existing footer aesthetic" + ] + }, + { + "title": "Available Resources", + "items": [ + "**📦 Repository** - Source code hosted on Gitea (lab.code-rove.com)", + "**📖 Documentation** - Comprehensive README and project documentation", + "**🐳 Docker** - Official Docker images on ProGet container registry", + "**📦 NuGet** - .NET client library for C# applications", + "**📦 NPM** - JavaScript/TypeScript client library (@flare/bitip-client)" + ] + }, + { + "title": "Technical Details", + "items": [ + "Added `.footer-links` CSS class with flexbox layout", + "Implemented smooth hover transitions with `transform` and `background` effects", + "Links open in new tab with `target=\"_blank\"` and security attributes", + "Added descriptive `title` attributes for accessibility", + "Maintained consistent spacing and typography with existing footer" + ] + } + ] + }, { "version": "1.0.1", "date": "2025-10-05T02:29:00Z", diff --git a/package-lock.json b/package-lock.json index c8f452b..3ee8c25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "bitip", - "version": "1.0.0", + "version": "1.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bitip", - "version": "1.0.0", + "version": "1.0.2", "license": "MIT", "workspaces": [ "src/backend", @@ -4224,6 +4224,15 @@ "node": "20 || >=22" } }, + "node_modules/lucide-react": { + "version": "0.544.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.544.0.tgz", + "integrity": "sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.19", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", @@ -6637,7 +6646,7 @@ }, "src/backend": { "name": "bitip-backend", - "version": "1.0.0", + "version": "1.0.2", "dependencies": { "@maxmind/geoip2-node": "^6.1.0", "compression": "^1.7.4", @@ -7126,10 +7135,11 @@ }, "src/frontend": { "name": "bitip-frontend", - "version": "1.0.0", + "version": "1.0.2", "dependencies": { "axios": "^1.12.2", "leaflet": "^1.9.4", + "lucide-react": "^0.544.0", "react": "^19.1.1", "react-dom": "^19.1.1", "react-leaflet": "^5.0.0", diff --git a/package.json b/package.json index ba3656c..241d6ea 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bitip", - "version": "1.0.1", + "version": "1.0.2", "description": "Bitip - GeoIP Lookup Service with REST API and Web Interface", "main": "dist/backend/index.js", "scripts": { diff --git a/src/backend/package.json b/src/backend/package.json index 7a7724f..add945f 100644 --- a/src/backend/package.json +++ b/src/backend/package.json @@ -1,6 +1,6 @@ { "name": "bitip-backend", - "version": "1.0.1", + "version": "1.0.2", "description": "Bitip Backend - GeoIP REST API Service", "type": "module", "main": "dist/index.js", diff --git a/src/frontend/package.json b/src/frontend/package.json index 24b3694..1f45084 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -1,6 +1,6 @@ { "name": "bitip-frontend", - "version": "1.0.0", + "version": "1.0.2", "description": "Bitip Frontend - GeoIP Web Interface", "type": "module", "scripts": { @@ -14,6 +14,7 @@ "dependencies": { "axios": "^1.12.2", "leaflet": "^1.9.4", + "lucide-react": "^0.544.0", "react": "^19.1.1", "react-dom": "^19.1.1", "react-leaflet": "^5.0.0", diff --git a/src/frontend/src/App.css b/src/frontend/src/App.css index 64dd874..583beea 100644 --- a/src/frontend/src/App.css +++ b/src/frontend/src/App.css @@ -27,9 +27,22 @@ body { background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); color: white; - text-align: center; padding: 2rem 1rem; border-bottom: 1px solid rgba(255, 255, 255, 0.1); + position: relative; +} + +.header > .external-links { + position: absolute; + top: 1rem; + right: 1rem; + z-index: 10; +} + +.header-content { + text-align: center; + max-width: 1200px; + margin: 0 auto; } .header h1 { @@ -42,7 +55,7 @@ body { .header p { font-size: 1.2rem; opacity: 0.9; - margin-bottom: 1rem; + margin-bottom: 0; } /* Navigation */ @@ -111,6 +124,11 @@ body { /* Responsive Design */ @media (max-width: 768px) { + .header > .external-links { + top: 0.5rem; + right: 0.5rem; + } + .header h1 { font-size: 2.5rem; } @@ -127,4 +145,8 @@ body { padding: 0.5rem 1rem; font-size: 0.9rem; } + + .external-links { + gap: 0.5rem; + } } diff --git a/src/frontend/src/App.tsx b/src/frontend/src/App.tsx index dce6254..545468d 100644 --- a/src/frontend/src/App.tsx +++ b/src/frontend/src/App.tsx @@ -3,6 +3,7 @@ import { Routes, Route, NavLink } from 'react-router-dom'; import Home from './pages/Home.js'; import Overview from './pages/Overview.js'; import ReleaseNotes from './pages/ReleaseNotes.js'; +import ExternalLinks from './components/ExternalLinks.js'; import BitipAPI from './services/api.js'; import './App.css'; @@ -33,8 +34,11 @@ const App: React.FC = () => { return (
-

🌍 Bitip

-

Professional GeoIP Lookup Service

+ +
+

🌍 Bitip

+

Professional GeoIP Lookup Service

+