A modern, beautiful, cross-platform desktop contact management application built with Go (Golang) and Wails, featuring an intuitive GUI, smart ID system, and a Recycle Bin for safe deletion.
Check the screenshot folder folder for some of the pictures of the interface
Contact Book Pro is a production-ready desktop application that demonstrates modern full-stack development practices using Go for the backend and modern web technologies for the frontend, packaged into a native desktop application via Wails.
Built as part of the SIWES (Students Industrial Work Experience Scheme) program, this project showcases enterprise-grade architecture patterns including:
- π Permanent Database IDs (like JIRA:
CB-0001) - π Sequential Display Indices (auto-renumbering)
- ποΈ Soft Delete with Recycle Bin (like Gmail)
- β»οΈ Recovery System (restore deleted contacts)
- π Duplicate Prevention (unique phone & email)
- π¨ Modern UI (sidebar navigation, toast notifications)
- β Create β Add contacts with full validation
- β Read β View all contacts in a beautiful table
- β Update β Edit any contact field
- β Delete β Soft delete to Recycle Bin
- π Smart Search β Search by name, phone, email, address, or CB-ID
- ποΈ Recycle Bin β Recover or permanently delete
- π₯ Empty Bin β Bulk permanent deletion
- π Cramable IDs β Easy-to-remember format (
CB-0001) - π Display Index β Sequential numbering (
#1,#2,#3) - π Toast Notifications β Beautiful success/error feedback
- π Timestamps β Track when contacts are added/deleted
- π Auto-Migration β Backward compatible with old data
- β Letter-only validation for names
- β Phone number format check (7-15 digits)
- β Email format validation
- β Required field checks
- β Duplicate phone/email prevention
- β Confirmation dialogs for destructive actions
- π¨ Modern dark sidebar with gradient
- π Color-coded action buttons
- π« Smooth transitions and hover effects
- π± Responsive layout
- π Toast notifications
- π€ Auto-generated user avatars
- Go (Golang) v1.22+ β Core language
- Wails v2 v2.12.0 β Desktop framework
- JSON β Data persistence
- HTML5 β Structure
- CSS3 β Custom styling with gradients
- Vanilla JavaScript β Frontend logic
- Vite β Build tool
- Repository Pattern β Storage layer abstraction
- Soft Delete β Industry-standard data preservation
- Auto-Migration β Backward compatibility
- Persistent ID Counter β Guaranteed unique IDs
ContactBookGUI/ β βββ π main.go # Wails entry point βββ π app.go # Core business logic & API βββ π go.mod # Go dependencies βββ π go.sum # Dependency checksums βββ π wails.json # Wails configuration βββ π README.md # This file βββ π LICENSE # MIT License βββ π .gitignore # Git ignore rules β βββ π models/ β βββ contact.go # Contact data structure β βββ π storage/ β βββ file_storage.go # JSON storage + ID generation β βββ π validator/ β βββ validator.go # Input validation β βββ π frontend/ β βββ index.html # Main HTML β βββ package.json # NPM dependencies β βββ src/ β βββ main.js # Frontend logic β βββ style.css # Styling β βββ assets/ # Static assets β βββ π data/ # Auto-generated β βββ contacts.json # Contact database β βββ .id_counter # Persistent ID counter β βββ π build/ # Build output βββ π screenshots/ # README images
-
Go 1.22+ β Download
-
Node.js 16+ β Download
-
Wails CLI:
go install github.com/wailsapp/wails/v2/cmd/wails@latest
go version # go1.22+ node --version # v16+ wails version # v2.12+
git clone https://github.com/YOUR-USERNAME/ContactBookGUI.git cd ContactBookGUI
go mod tidy
cd frontend npm install cd ..
wails dev
A desktop window will open! π
Create a standalone executable:
wails build
Output:
build/bin/ContactBookGUI.exe # Windows
build/bin/ContactBookGUI.app # macOS
build/bin/ContactBookGUI # Linux
The single executable file can be distributed without installation!
- Click β Add Contact in the sidebar
- Fill in all fields (validated in real-time)
- Click πΎ Save Contact
- π View β See full contact details
- βοΈ Edit β Update any field
- π Delete β Move to Recycle Bin
- Click ποΈ Recycle Bin in sidebar
- β»οΈ Recover β Restore contact (keeps original CB-ID)
- π₯ Forever β Permanently delete
- π₯ Empty Bin β Delete all at once
- Click π Search
- Type any keyword (name, phone, email, address, or CB-ID)
- Real-time results with full action buttons
| Type | Example | Behavior |
|||-|
| Database ID | CB-0001 | π Permanent, never changes |
| Display Index | #1, #2, #3 | π Sequential, updates dynamically |
Add contacts: CB-0001 (#1), CB-0002 (#2), CB-0003 (#3) Delete CB-0002: CB-0001 (#1), CB-0003 (#2) β Display renumbers Add new: CB-0001 (#1), CB-0003 (#2), CB-0004 (#3) Recover CB-0002: CB-0001 (#1), CB-0003 (#2), CB-0004 (#3), CB-0002 (#4)
Database IDs are NEVER reused, ensuring data integrity forever (like GitHub Issues).
| Field | Rules |
|---|---|
| First/Last Name | Letters only, required |
| Phone | 7-15 digits (allows +, -, spaces) |
| Valid email format | |
| Address | Cannot be empty |
| Duplicate Check | Phone & Email must be unique |
- Primary:
#1a1a2eβ#16213e(Sidebar gradient) - Accent:
#0f3460(Active states) - Success:
#dcfce7/#166534 - Warning:
#fef3c7/#92400e - Danger:
#fee2e2/#dc2626
- Export to CSV/Excel
- Import from CSV/vCard
- Profile pictures
- Contact groups/tags
- Dark/Light theme toggle
- Cloud sync
- Mobile companion app
- Multi-language support
- Keyboard shortcuts
- Backup & restore
Contributions welcome! Please follow these steps:
- Fork the repo
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License β see LICENSE file for details.
Olufemi Keripe (a.k.a FEMZYK)
- π SIWES Student at LASU
- πΌ Aspiring Full-Stack Developer
- π Lagos, Nigeria π³π¬
- π§ femzykenterprises@gmail.com
- π [LinkedIn](Working on retrieval)
- π GitHub
- Wails Project β Amazing Go desktop framework
- Go Team β Powerful, elegant language
- SIWES Program β Practical learning opportunity
- My SIWES Team β Collaboration and support
If you found this project helpful, please give it a β on GitHub!
Built with β€οΈ in Lagos, Nigeria using Go + Wails