diff --git a/.gitignore b/.gitignore
index dbc0b53..e5c7b2a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,4 +45,6 @@ a.py
/pages/api/auth/*
/cypress
-cypress.json
\ No newline at end of file
+cypress.json
+
+/tool-templates
\ No newline at end of file
diff --git a/ADDING_NEW_TOOLS_GUIDE.md b/ADDING_NEW_TOOLS_GUIDE.md
new file mode 100644
index 0000000..278c584
--- /dev/null
+++ b/ADDING_NEW_TOOLS_GUIDE.md
@@ -0,0 +1,465 @@
+# Adding New Tools and Functionality Guide
+
+This document provides a comprehensive guide for adding new tools and functionality to the Wastpol web application. It's designed to help developers (including AI agents) integrate new tools from separate projects into the main application.
+
+## Project Overview
+
+The Wastpol application is a Next.js-based web application with the following key characteristics:
+- **Framework**: Next.js 12 with React 17
+- **Styling**: Tailwind CSS with custom UI components
+- **Authentication**: NextAuth.js
+- **Architecture**: Pages-based routing with component-driven design
+- **UI Library**: Custom components + Evergreen UI + Heroicons
+
+## Project Structure
+
+```
+web-app/
+├── pages/ # Next.js pages (routes)
+│ ├── api/ # API endpoints
+│ ├── index.js # Main dashboard with tabs
+│ ├── cross.js # Grid tool
+│ ├── uziomy.js # Ground connections tool
+│ ├── tracking.js # Package tracking
+│ └── [other-tools].js # Additional tools
+├── components/
+│ ├── ui/ # Reusable UI components
+│ │ ├── Layout.js # Main layout with navigation
+│ │ └── components.js # UI component library
+│ └── templates/ # Tool-specific components
+├── styles/ # Global styles
+├── public/ # Static assets
+└── externals/ # External data files
+```
+
+## Adding a New Tool - Step by Step
+
+### 1. Planning Phase
+
+Before adding a new tool, define:
+- **Tool Purpose**: What does the tool do?
+- **Tool Name**: Short, descriptive name
+- **Route**: URL path (e.g., `/new-tool`)
+- **Icon**: Choose from Heroicons
+- **Dependencies**: Any new packages needed
+- **API Requirements**: Backend processing needs
+
+### 2. Tool Integration Checklist
+
+#### A. Create the Main Page Component
+
+Create a new file: `pages/[tool-name].js`
+
+**Template Structure:**
+```javascript
+import { useState, useCallback } from "react";
+import { useSession, signIn } from "next-auth/react";
+import Layout from "../components/ui/Layout";
+import { Card, CardHeader, CardContent, CardTitle, CardDescription, Button, Alert } from "../components/ui/components";
+import { [ToolIcon] } from '@heroicons/react/24/outline';
+
+export default function NewTool() {
+ const { data: session } = useSession();
+ const [isLoading, setIsLoading] = useState(false);
+
+ // Tool-specific state variables
+ const [toolData, setToolData] = useState(null);
+
+ // Authentication check
+ if (!session) {
+ return (
+
+ Tool description here
+ Wymagane logowanie
+
+
+ New Tool Name
+
+
+ Narzędzie do projektowania systemów dystrybucji energii elektrycznej +
++ Wybrano: {connectionFrom.name} +
++ Kliknij drugi obiekt aby połączyć kablem +
+ID: {selectedObject.id}
++ {selectedObject.loadUnits || 1} × 7kW = {((selectedObject.loadUnits || 1) * 7).toFixed(2)} kW (raw) +
+
+ Współczynnik jednoczesności: {(() => {
+ const networkGraph = buildNetworkGraph();
+ const totalConsumers = getTotalDownstreamConsumers(networkGraph, selectedObject.id, new Set());
+ return getCorrectionFactor(totalConsumers);
+ })()}
+ Całkowita liczba odbiorców: {(() => {
+ const networkGraph = buildNetworkGraph();
+ return getTotalDownstreamConsumers(networkGraph, selectedObject.id, new Set());
+ })()}
+ Skorygowana moc: {(() => {
+ const networkGraph = buildNetworkGraph();
+ const totalConsumers = getTotalDownstreamConsumers(networkGraph, selectedObject.id, new Set());
+ const factor = getCorrectionFactor(totalConsumers);
+ return ((selectedObject.loadUnits || 1) * 7 * factor).toFixed(2);
+ })()} kW
+
+ {selectedObject.loadUnits || 1} × 4kW = {((selectedObject.loadUnits || 1) * 4).toFixed(2)} kW (raw) +
+
+ Współczynnik jednoczesności: {(() => {
+ const networkGraph = buildNetworkGraph();
+ const totalConsumers = getTotalDownstreamConsumers(networkGraph, selectedObject.id, new Set());
+ return getCorrectionFactor(totalConsumers);
+ })()}
+ Całkowita liczba odbiorców: {(() => {
+ const networkGraph = buildNetworkGraph();
+ return getTotalDownstreamConsumers(networkGraph, selectedObject.id, new Set());
+ })()}
+ Skorygowana moc: {(() => {
+ const networkGraph = buildNetworkGraph();
+ const totalConsumers = getTotalDownstreamConsumers(networkGraph, selectedObject.id, new Set());
+ const factor = getCorrectionFactor(totalConsumers);
+ return ((selectedObject.loadUnits || 1) * 4 * factor).toFixed(2);
+ })()} kW
+
+ {selectedObject.commercialLoad || 0} kW (bez współczynnika korekcji) +
+ID: {selectedCable.id}
++ {objects.find(obj => obj.id === selectedCable.from)?.name} → {objects.find(obj => obj.id === selectedCable.to)?.name} +
++ Rezystancja: {getCableResistance(selectedCable)?.toFixed(4) || 'N/A'} Ω/km +
++ Typ instalacji: {(selectedCable.cableType === 'YAKY' || selectedCable.cableType === 'NA2XY-J') ? 'Podziemna' : 'Napowietrzna'} +
+Brak wybranego obiektu
+ )} +