Network Source of Truth (SOT) - A lightweight, markdown-native IPAM tool for CCNA students to practice network design with version control.
- Port-Level IP Management - Assign IPs per interface, not per device
- Editable Table Interface - Inline editing for all network parameters
- Automatic Validation - 8 validation rules with real-time feedback
- Cascading Changes (🔥 Killer Feature) - Change one IP, see all dependencies
- CLI Generator - One-click Cisco IOS config generation
- Markdown Native - All data stored as YAML frontmatter in
.mdfiles - Git-Ready - Perfect for GitHub collaboration and version control
- Network Topology Graph - Visual representation of your network
- Zero Dependencies - Offline-first, no database required
- Less Busywork - Auto-calculate subnets, masks, wildcards
- Better Learning - See network dependencies in real-time
- Git Workflow - Learn version control while building networks
- Portable - Take your lab anywhere (just GitHub repo)
- Free - Open-source, forever free
| Feature | NetBox | Ansible | Packet Tracer | GNS3 | Network SOT |
|---|---|---|---|---|---|
| Port-level IP management | ✅ | ❌ | ❌ | ✅ | ✅ |
| Editable inline table | Partial | ❌ | ❌ | ❌ | ✅ |
| Cascading confirmation | ❌ | ❌ | ❌ | ❌ | ✅ |
| CLI generator | ❌ | ✅ | ❌ | ✅ | ✅ |
| Lightweight/Offline | ❌ | ❌ | ✅ | ❌ | ✅ |
| Git-native format | ❌ | ✅ | ❌ | ❌ | ✅ |
| Learning-focused | ❌ | ❌ | ✅ | ✅ | ✅ |
| Free | ✅ | ✅ | Partial | ✅ | ✅ |
- 📚 CCNA Students (200-301) learning IPv4 addressing
- 🏫 Networking Classes (competitive advantage)
- 💼 Lab Documentation (instead of manual notes)
- 🤝 Peer Learning (GitHub collaboration)
- 🏢 Small Lab Environments (lightweight alternative to NetBox)
# Clone repo
git clone https://github.com/pakcli/Webapp-Learn-Network-Enginner.git
cd Webapp-Learn-Network-Enginner
# Install dependencies
npm install
# Start dev server
npm run dev
# → Opens http://localhost:5173- Open app
- Click "+ Add Device"
- Create devices:
R1(router),SW1(switch),PC1(client) - Edit table:
- R1.Gi0/0: 192.168.1.1/24
- SW1.Gi0/0: connected to R1.Gi0/0
- PC1.Gi0/0: 192.168.1.10/24 (gateway: 192.168.1.1)
- Click "Generate CLI" → Copy to Packet Tracer
- Click "Export Vault" → Commit to GitHub
.
├── src/
│ ├── types/ # TypeScript interfaces
│ ├── components/ # React components
│ ├── services/ # Business logic (engines)
│ ├── hooks/ # Custom React hooks
│ ├── utils/ # Utilities
│ ├── constants/ # Constants
│ ├── styles/ # Global CSS
│ ├── App.tsx # Root component
│ └── index.tsx # Entry point
├── docs/ # Documentation
├── examples/ # Example vaults
├── tests/ # Test files
└── public/ # Static assets
Each device = one .md file with YAML frontmatter:
---
hostname: R1
role: router
ports:
Gi0/0:
ip: 192.168.1.1
cidr: 24
subnet: 192.168.1.0
wildcard: 0.0.0.255
connected_to: SW1.Fa0/1
ospf_area: 0
Gi0/1:
ip: 10.0.0.1
cidr: 30
connected_to: R2.Gi0/0
---
# Router Configuration
Core router for CCNA Lab 01- ✅ Port-level IPs - Every interface gets its own IP
- ✅ Same segment = same subnet - Connected ports must match
- ✅ Gateway exists - Client gateways must be real devices
- ✅ Router-to-router /30 - P2P links are point-to-point
- ✅ No overlap - IPs must be unique
- ✅ OSPF match - Wildcards must match CIDR
- ✅ Cascading confirm - See dependencies before applying
- ✅ CLI valid - Only generate if all rules pass
User changes: R1.Gi0/0: 192.168.1.1 → 192.168.2.1
System detects:
- PC1 gateway (192.168.1.1) no longer exists
- PC1 must move to 192.168.2.0/24
System asks:
"Update PC1 gateway to 192.168.2.1 and IP to 192.168.2.10? YES/NO"
User clicks YES → All 4 files updated
User clicks NO → Change reverted
- Frontend: React 18 + TypeScript
- State: Zustand
- Styling: CSS Modules
- Build: Vite
- Testing: Vitest + Testing Library
- Graph: Cytoscape.js
- Data: YAML + Markdown
- React + TypeScript setup
- Type definitions
- Markdown parser
- Device table component
- Validation engine
- CLI generator
- Cascading detector
- Graph visualization
- File upload/export
- Obsidian plugin wrapper
- GNS3 integration
- Packet Tracer export
- Multi-vault management
- Collaborative editing
Contributions welcome! See CONTRIBUTING.md for guidelines.
# Fork, create feature branch
git checkout -b feature/your-feature
commit changes
git push origin feature/your-feature
# Open PRMIT License - See LICENSE file
Specifically designed to help students like you:
- ✅ Stop spending time on manual data entry
- ✅ Focus on network design concepts
- ✅ Learn Git workflow alongside networking
- ✅ Build a portfolio on GitHub
- ✅ Collaborate with peers
One Liner:
"Enter IP once, validate automatically, see dependencies, generate CLI — focus on learning the logic, not busywork." 🎯
- 💬 GitHub Discussions: Ask questions
- 🐛 GitHub Issues: Report bugs
- 📧 Email: [your email]
Happy learning! 🚀