Compare commits

...

3 Commits

13 changed files with 197 additions and 16 deletions

View File

@ -76,9 +76,8 @@ RUN npm ci --only=production --workspace=bitip-backend && \
# Copy built artifacts from builder
COPY --from=builder /app/dist ./dist
# Copy configuration files needed at runtime
COPY --from=builder /app/ReleaseNotes.json ./
COPY --from=builder /app/Overview.json ./
# Copy content files needed at runtime
COPY --from=builder /app/content ./content
# Create directory for MaxMind databases
RUN mkdir -p /usr/share/maxmind && \

View File

@ -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",

18
package-lock.json generated
View File

@ -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",

View File

@ -1,11 +1,13 @@
{
"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": {
"dev": "concurrently \"npm run dev:backend\" \"npm run dev:frontend\"",
"dev:debug": "concurrently \"npm run dev:backend:debug\" \"npm run dev:frontend\"",
"dev:backend": "cd src/backend && npm run dev",
"dev:backend:debug": "cd src/backend && npm run dev:debug",
"dev:frontend": "cd src/frontend && npm run dev",
"build": "npm run build:backend && npm run build:frontend",
"build:backend": "cd src/backend && npm run build",

View File

@ -0,0 +1,11 @@
{
"watch": ["."],
"ext": "ts,json",
"ignore": ["**/*.spec.ts", "**/*.test.ts", "node_modules", "dist"],
"exec": "node --inspect --import ./register.js index.ts",
"delay": 1000,
"env": {
"NODE_ENV": "development",
"NODE_OPTIONS": "--experimental-specifier-resolution=node"
}
}

View File

@ -1,11 +1,12 @@
{
"name": "bitip-backend",
"version": "1.0.1",
"version": "1.0.2",
"description": "Bitip Backend - GeoIP REST API Service",
"type": "module",
"main": "dist/index.js",
"scripts": {
"dev": "nodemon",
"dev:debug": "nodemon --config nodemon-debug.json",
"build": "tsup",
"start": "node dist/index.js",
"lint": "eslint .",

View File

@ -29,8 +29,8 @@ const resolveFilePath = (...relativePath: string[]): string => {
};
const envPath = resolveFilePath('.env');
const releaseNotesPath = resolveFilePath('ReleaseNotes.json');
const overviewPath = resolveFilePath('Overview.json');
const releaseNotesPath = resolveFilePath('content', 'ReleaseNotes.json');
const overviewPath = resolveFilePath('content', 'Overview.json');
const frontendPrefix = isProduction ? 'dist' : 'src';
const frontendPath = resolveFilePath(frontendPrefix, 'frontend');

View File

@ -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",

View File

@ -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;
}
}

View File

@ -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 (
<div className="app">
<header className="header">
<ExternalLinks />
<div className="header-content">
<h1>🌍 Bitip</h1>
<p>Professional GeoIP Lookup Service</p>
</div>
<nav className="nav">
<NavLink
to="/"

View 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;
}

View 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;