Django Design Philosophies and Best Practices
Your perspective on adhering to Django's guidelines is well-founded based on Django's core design philosophies. The issues you've identified with the project align with several violations of Django's fundamental principles.
Key Django Design Philosophies Being Violated
Don't Repeat Yourself (DRY)
Installing redundant packages like django-crispy-forms while using Tailwind creates unnecessary duplication of functionality. Django emphasizes that "every distinct concept and/or piece of data should live in one, and only one, place."
Loose Coupling
Django's architecture is designed with "loose coupling and tight cohesion" in mind. Overhauling the folder structure without clear justification likely disrupts this principle, making the codebase harder to maintain and understand.
Explicit is Better Than Implicit
Django follows the Python principle that "explicit is better than implicit." Custom solutions that deviate significantly from Django's conventions often create implicit behaviors that are difficult to debug and maintain.
Quick Development
One of Django's core philosophies is to "make the tedious aspects of web development fast." The fact that this project took nearly a year to develop yet remains buggy suggests that the custom approach has undermined this advantage.
Regarding the Admin Panel
Using Django's admin panel as the main dashboard is generally not recommended. The admin is designed primarily for site administrators to manage content, not as a user-facing interface. While customization is possible, extensive modifications often lead to maintenance challenges and can break with Django updates.
Conclusion
Your argument that significant deviation from Django's architecture might warrant building a custom solution has merit. Django's design philosophies exist to promote maintainability, efficiency, and consistency. When these are ignored, developers often lose the benefits that made them choose Django in the first place.
The project's current state (buggy, missing features, not production-ready after a year) suggests that the custom approach has not yielded the expected benefits and may have introduced unnecessary complexity.
For future projects, adhering more closely to Django's conventions and design philosophies would likely result in more maintainable, efficient, and robust applications.