mirror of
https://dev.azure.com/tstanciu94/PhantomMind/_git/Bitip
synced 2025-10-13 01:52:19 +03:00
feat: add external resource links in footer for easy access to documentation, repository, and client libraries
This commit is contained in:
parent
d24f8942dd
commit
07412e620d
@ -1,5 +1,47 @@
|
|||||||
{
|
{
|
||||||
"releases": [
|
"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",
|
"version": "1.0.1",
|
||||||
"date": "2025-10-05T02:29:00Z",
|
"date": "2025-10-05T02:29:00Z",
|
||||||
|
18
package-lock.json
generated
18
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "bitip",
|
"name": "bitip",
|
||||||
"version": "1.0.0",
|
"version": "1.0.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "bitip",
|
"name": "bitip",
|
||||||
"version": "1.0.0",
|
"version": "1.0.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"src/backend",
|
"src/backend",
|
||||||
@ -4224,6 +4224,15 @@
|
|||||||
"node": "20 || >=22"
|
"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": {
|
"node_modules/magic-string": {
|
||||||
"version": "0.30.19",
|
"version": "0.30.19",
|
||||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz",
|
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz",
|
||||||
@ -6637,7 +6646,7 @@
|
|||||||
},
|
},
|
||||||
"src/backend": {
|
"src/backend": {
|
||||||
"name": "bitip-backend",
|
"name": "bitip-backend",
|
||||||
"version": "1.0.0",
|
"version": "1.0.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@maxmind/geoip2-node": "^6.1.0",
|
"@maxmind/geoip2-node": "^6.1.0",
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
@ -7126,10 +7135,11 @@
|
|||||||
},
|
},
|
||||||
"src/frontend": {
|
"src/frontend": {
|
||||||
"name": "bitip-frontend",
|
"name": "bitip-frontend",
|
||||||
"version": "1.0.0",
|
"version": "1.0.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^1.12.2",
|
"axios": "^1.12.2",
|
||||||
"leaflet": "^1.9.4",
|
"leaflet": "^1.9.4",
|
||||||
|
"lucide-react": "^0.544.0",
|
||||||
"react": "^19.1.1",
|
"react": "^19.1.1",
|
||||||
"react-dom": "^19.1.1",
|
"react-dom": "^19.1.1",
|
||||||
"react-leaflet": "^5.0.0",
|
"react-leaflet": "^5.0.0",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "bitip",
|
"name": "bitip",
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"description": "Bitip - GeoIP Lookup Service with REST API and Web Interface",
|
"description": "Bitip - GeoIP Lookup Service with REST API and Web Interface",
|
||||||
"main": "dist/backend/index.js",
|
"main": "dist/backend/index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "bitip-backend",
|
"name": "bitip-backend",
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"description": "Bitip Backend - GeoIP REST API Service",
|
"description": "Bitip Backend - GeoIP REST API Service",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "bitip-frontend",
|
"name": "bitip-frontend",
|
||||||
"version": "1.0.0",
|
"version": "1.0.2",
|
||||||
"description": "Bitip Frontend - GeoIP Web Interface",
|
"description": "Bitip Frontend - GeoIP Web Interface",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@ -14,6 +14,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^1.12.2",
|
"axios": "^1.12.2",
|
||||||
"leaflet": "^1.9.4",
|
"leaflet": "^1.9.4",
|
||||||
|
"lucide-react": "^0.544.0",
|
||||||
"react": "^19.1.1",
|
"react": "^19.1.1",
|
||||||
"react-dom": "^19.1.1",
|
"react-dom": "^19.1.1",
|
||||||
"react-leaflet": "^5.0.0",
|
"react-leaflet": "^5.0.0",
|
||||||
|
@ -27,9 +27,22 @@ body {
|
|||||||
background: rgba(255, 255, 255, 0.1);
|
background: rgba(255, 255, 255, 0.1);
|
||||||
backdrop-filter: blur(10px);
|
backdrop-filter: blur(10px);
|
||||||
color: white;
|
color: white;
|
||||||
text-align: center;
|
|
||||||
padding: 2rem 1rem;
|
padding: 2rem 1rem;
|
||||||
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
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 {
|
.header h1 {
|
||||||
@ -42,7 +55,7 @@ body {
|
|||||||
.header p {
|
.header p {
|
||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
opacity: 0.9;
|
opacity: 0.9;
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Navigation */
|
/* Navigation */
|
||||||
@ -111,6 +124,11 @@ body {
|
|||||||
|
|
||||||
/* Responsive Design */
|
/* Responsive Design */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
|
.header > .external-links {
|
||||||
|
top: 0.5rem;
|
||||||
|
right: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.header h1 {
|
.header h1 {
|
||||||
font-size: 2.5rem;
|
font-size: 2.5rem;
|
||||||
}
|
}
|
||||||
@ -127,4 +145,8 @@ body {
|
|||||||
padding: 0.5rem 1rem;
|
padding: 0.5rem 1rem;
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.external-links {
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ import { Routes, Route, NavLink } from 'react-router-dom';
|
|||||||
import Home from './pages/Home.js';
|
import Home from './pages/Home.js';
|
||||||
import Overview from './pages/Overview.js';
|
import Overview from './pages/Overview.js';
|
||||||
import ReleaseNotes from './pages/ReleaseNotes.js';
|
import ReleaseNotes from './pages/ReleaseNotes.js';
|
||||||
|
import ExternalLinks from './components/ExternalLinks.js';
|
||||||
import BitipAPI from './services/api.js';
|
import BitipAPI from './services/api.js';
|
||||||
import './App.css';
|
import './App.css';
|
||||||
|
|
||||||
@ -33,8 +34,11 @@ const App: React.FC = () => {
|
|||||||
return (
|
return (
|
||||||
<div className="app">
|
<div className="app">
|
||||||
<header className="header">
|
<header className="header">
|
||||||
<h1>🌍 Bitip</h1>
|
<ExternalLinks />
|
||||||
<p>Professional GeoIP Lookup Service</p>
|
<div className="header-content">
|
||||||
|
<h1>🌍 Bitip</h1>
|
||||||
|
<p>Professional GeoIP Lookup Service</p>
|
||||||
|
</div>
|
||||||
<nav className="nav">
|
<nav className="nav">
|
||||||
<NavLink
|
<NavLink
|
||||||
to="/"
|
to="/"
|
||||||
|
26
src/frontend/src/components/ExternalLinks.css
Normal file
26
src/frontend/src/components/ExternalLinks.css
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
.external-links {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.external-link {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: rgba(255, 255, 255, 0.7);
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
padding: 0.4rem;
|
||||||
|
border-radius: 6px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.external-link:hover {
|
||||||
|
color: rgba(255, 255, 255, 1);
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.external-link svg {
|
||||||
|
display: block;
|
||||||
|
}
|
63
src/frontend/src/components/ExternalLinks.tsx
Normal file
63
src/frontend/src/components/ExternalLinks.tsx
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import {
|
||||||
|
Github,
|
||||||
|
BookOpen,
|
||||||
|
Container,
|
||||||
|
Package,
|
||||||
|
PackageOpen,
|
||||||
|
} from 'lucide-react';
|
||||||
|
import './ExternalLinks.css';
|
||||||
|
|
||||||
|
const ExternalLinks: React.FC = () => {
|
||||||
|
return (
|
||||||
|
<div className="external-links">
|
||||||
|
<a
|
||||||
|
href="https://lab.code-rove.com/gitea/tudor.stanciu/bitip"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
title="Source Code Repository"
|
||||||
|
className="external-link"
|
||||||
|
>
|
||||||
|
<Github size={20} />
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="https://lab.code-rove.com/gitea/tudor.stanciu/bitip#readme"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
title="Documentation"
|
||||||
|
className="external-link"
|
||||||
|
>
|
||||||
|
<BookOpen size={20} />
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="https://proget.code-rove.com/containers/repositories/stable-registry/bitip/overview"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
title="Docker Registry"
|
||||||
|
className="external-link"
|
||||||
|
>
|
||||||
|
<Container size={20} />
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="https://lab.code-rove.com/public-nuget-server/packages/bitip.client"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
title="NuGet Client Library"
|
||||||
|
className="external-link"
|
||||||
|
>
|
||||||
|
<Package size={20} />
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="https://lab.code-rove.com/public-node-registry/-/web/detail/@flare/bitip-client"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
title="NPM Client Library"
|
||||||
|
className="external-link"
|
||||||
|
>
|
||||||
|
<PackageOpen size={20} />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ExternalLinks;
|
Loading…
x
Reference in New Issue
Block a user