Civalgo Tech Stack
I recently put together a concise overview of our tech stack at Civalgo during a due diligence exercise, and I figured it could be insightful to share with my network. I'm eager to spark stimulating conversations and gather different perspectives. Please don't hesitate to share your comments and thoughts!
Tech stack
Our technology stack consists of the following components:
(Note: I've incorporated my personal opinion in the form of emoticons for each technology as it relates to our current projects at Civalgo. As we all know, the technology landscape evolves rapidly, and sometimes we make choices that we might later reconsider. Additionally, as engineers, we continually grow and discover improved methods for accomplishing tasks.)
• Back-End: Node.js (🙂), Express.js (😐), Sequelize (😞), Apollo (🙂), GraphQL (😀), Prisma (🤩)
• Database: PostgreSQL (😀), Digital Ocean Space (😐), Elasticsearch (🙂)
• Front-End: Next.js (😐), React (😀), Webpack (🙂), TypeScript (🤩), Redwood.js (🤩)
• Mobile: React Native (😀), Expo (😀), WatermelonDB (🙂)
• APIs: GraphQL (😀), Hasura (🙂), Twilio (🙂), Zapier (🙂), Looker (😀)
• Cloud: Digital Ocean (🙂), Google Cloud Platform (🙂), Vercel (😐), Supabase (😀), Auth0 (😞)
• Infrastructure: Docker (😀), Kubernetes (🙂), Ingress (🙂), render (😀)
• DevOps: GitLab CI (🙂)
• Internal Tools: Notion (🤩), ClickUp (😞)
Design Patterns
Our codebase consists of over hundreds thousands lines, and we're committed to adhering to Clean Code principles. We incorporate various design patterns, with the most noteworthy being:
• Real-time data subscription: Our application receives and displays live data updates from data sources like APIs or databases as they happen. This enhances user experience and boosts the app's responsiveness, especially when collaboration is essential.
• Mobile-first: To ensure our app functions on any device, we prioritize designing for mobile devices, optimizing layout and functionality for smaller screens. We then progressively enhance designs for larger devices, creating a seamless user experience across different screen sizes.
• Offline-first: We adopt an offline-first design approach, prioritizing the app's functionality and usability even without an internet connection. This ensures a smooth user experience regardless of network conditions, making our app more resilient and user-friendly in areas with limited or intermittent internet access.