๐ Hey Dev Community!
Let me introduce you all to my latest project: Pblog! ๐
Pblog is a Dockerized terminal-based user interface (TUI) blogging application designed to make blog management seamless. It allows users to create, read, update, and delete posts efficiently while supporting similarity-based search and paginated fetching for optimized performance and to prevent database overload.
๐ค Why This Project?
I started this project as a way to learn Docker and how to integrate a database into a backend. Through this journey, I discovered how a database like PostgreSQL communicates with another container over the same network, and it was a game-changer! ๐
โจ Features
๐ CRUD Operations โ Manage Your Blog with Ease
Pblog provides an intuitive way to handle blog posts with confirmation prompts and error handling.
Create a Post ๐
Effortlessly add new blog entries.
Read a Post ๐
View detailed content with ease.
Update a Post โ๏ธ
Automatically pre-fills previous content for quick editing.
CRUD with Confirmation โ
A confirmation of work done.
Error Handling โ ๏ธ
Robust validation and user-friendly error messages.
๐ Advanced Search Capabilities
ID-Based Search ๐ข
Retrieve posts using a unique identifier.
Similarity-Based Search ๐ง
Find posts based on content relevance.
Paginated Fetching ๐
Optimizes performance by fetching posts in batches.
๐ ๏ธ Technical Details
Pblog is built using:
- Docker ๐ณ โ For containerization and environment consistency.
- Go ๐ โ Chosen for its concurrency, performance, and simplicity in backend development.
- PostgreSQL ๐ข๏ธ โ Reliable, scalable, and feature-rich database.
- GORM ๐ โ An ORM that simplifies database interactions.
- tview ๐จ โ A powerful library for building TUI applications in Go.
โก Challenges Faced & Solutions
1๏ธโฃ Switching Focus in TUI ๐ฅ๏ธ
Problem: Initially, I struggled to shift focus between different sections of the TUI.
Solution: Using tview.Pages
, I was able to split the TUI into different sections and switch between them dynamically.
2๏ธโฃ Docker Compose Database Integration ๐ณ๐
Problem: The app couldn't communicate with the PostgreSQL database container.
Solution: The issue was that the app sometimes started before the database was fully ready. Adding depends_on
in docker-compose.yml
ensured the database initialized before the app started.
3๏ธโฃ Terminal Capture Issue โจ๏ธ
Problem: The database logs occupied the terminal, preventing the app from displaying the TUI.
Solution: Running the compose setup in detached mode (-d
) and then using docker attach
on the app container ensured the TUI appeared correctly.
๐ What's Next?
๐ Search Filtering โ Filter results through categories.
๐ Authentication โ Implement login and write permissions.
๐ท๏ธ User Preferences โ Recommend posts based on tags.
๐ฐ Payment Gateway โ Enable monetization options.
๐๏ธ PostgreSQL Deployment โ Deploy on a public server for worldwide sharing.
๐ Conclusion
Thanks for making it this far! ๐ This journey was incredibly rewarding as I went from knowing very little about Docker and database integration to building a fully functional application. If you find this project useful, check it out on GitHub and feel free to contribute! ๐
๐ GitHub Repo
Happy coding! ๐