/critterco-dev

Critter Dev Repo

Primary LanguagePythonMIT LicenseMIT

Build Status

Critter

Temporary repository for Critter app development.

Software Requirements.

  • Docker > v19.03

Working on the project.

How to run the app.

  • Make sure Docker engine is running.
  • [For Linux] Make sure you can run sudo commands or your user is in docker group, and you have docker-compose installed.
  • Open a terminal and navigate to project directory where "docker-compose.yml" file resides.
  • IMPORTANT make sure u rename the file ".env_example" to ".env" and write desired environment variables.
  • Run docker-compose up --build; wait for docker to download and build images.
  • You can access API endpoint at "localhost/api/", and frontend at "localhost".
  • Portainer is accessible at "localhost:9000". Make sure you create an admin account before 5 minutes or container stops.
  • Redis-commander is accessible at "localhost:8085" for monitoring redis caches.
  • API endpoints documentation .

Phase A

Frontend todos.

  • Implement testing modules/libraries and coverage reports for TDD.
  • Configure TravisCI for frontend tests/build report on each push.
  • Add basic landing page using bootstrap/? based on given design templates, including header, main body, footer.
  • Implement authentication system using VueX.
  • Handle user profile management functions (logout, edit info, etc.).
  • Add user profile template based on user profile management functions.
  • Add a map API for nearby businesses/services viewing.
  • Load data from biz API to map.
  • Filter businesses/services by location according to API search queries.

Backend todos.

  • Add a consistant test method or library (such as pytest, paramteraized.). commit
  • Cover tests for existing functions (+90% coverage). commit
  • Implement flake8, and configure it for needed files; fix linting errors. commit
  • Add Celery for asynchronous tasks such as sending emails for confirmation/password reset. commit
  • Add automated password reset via email through Celery. commit
  • Implement email confirmation at signup. commit
  • Configure django's setting to cache biz queries via Redis. commit
  • Move all django apps to an "apps" folder for a cleaner environment. commit
  • Move all scripts to a "scripts" folder, and make sure docker works properly with new paths. commit

Build (or Docker) todos.

  • Fix the error with pgadmin (not working after adding nginx). commit
  • Add Celery for asynchronous backend tasks. commit
  • Add Redis for caching. commit
  • [FAILED] Replace nginx with Traefik if it offers better solution for https and certs.

Phase A Ending:

  • Web has a frontend that shows User info/Biz info.
  • Users can post and edit Biz, and update their info, according to permissions.
  • Users can request "forgot password" and do it via email confirmation.
  • User location is determined via IP/permission for gps info. Or they select location.
  • Nearby Bizs will be shown on a map.
  • Users can comment on each biz and these comments show up on Biz pages.

Phase B

Android/iOS Apps.

  • Basic app layout with logo, map functionality, sign-up, login.
  • Users able to edit their personal info.
  • Users can post, edit Biz info based on their permissions.
  • App receive live GPS location and update user location info.
  • Show nearby Biz based on location.
  • Direct contact(phone call, etc.) from Biz page if Biz phone number was provided.
  • Users able to write comments, reviews, etc.

Backend todos.

  • Add user avatar. One image for user profile.
  • Differentiate reviews and comments in separate models/serializers.
  • Add likes/upvotes/reactions to comments and/or reviews.
  • Expand the Gallery of Biz to support multiple images possibly in a separate model.
  • Implement users uploading pictures of Biz.
  • Add editor/owner field to Biz so only owner user(s) can edit info.
  • Add blog/news to Biz (only owners can publish).
  • Add poll/surverys to Biz (only owners can publish).
  • Implement IP blacklists and concurrent request to prevent brute-forcing.
  • Email confirmation/password reset done through LINKS instead of 6-digit codes.
  • Add Biz info from available APIs (Google places, etc.) through web crawling.
  • Add categories/tag feature for Biz to be separated by them.
  • Implement Graphql if needed for specific needs.

Frontend todos.

  • Use Graphql for needed functionality, if any.
  • Run different performance tests and improve if results aren't satisfying.
  • Implement newly added Backend functions, such as like/reaction, differentiated comment/reviews, etc.

Build (or Docker) todos.

  • Add https certification(automated cert refresh), through either Nginx or Traefik.
  • Add MongoDB if it's needed for image upload, and gallery management.
  • Network mapping according to services and their communication needs.
  • Implement Docker Swarm for seamless and automated updates.
  • Implement Gitlab CI/CD if the service is better than current Travis CI.
  • Deploy the app on an appropriate host for live beta testing.
  • Run stress performance tests and debug the issues.