ContractsCounsel - the toolset

ContractsCounsel is a platform that allows clients to post projects and lawyers to bid on them. Clients can then hire a lawyer, and the platform will securely support communication between lawyer and client while the project is delivered.

The Basics

The bread-and-butter of the implementation

The programming language. We are using version 3.7.x.
The web framework. We are using version 3.0.x. I'm not a perfectionist, but I do have deadlines!
The SQL database, for storing all the data
A Python library to interact with AWS
Convert HTML to PDF. We need this to create PDF invoices easily.
Used to take payments.

Testing and Monitoring

Testing helps to ensure reliability. It provides confidence in making changes, helping to ensure that nothing else has been broken.

Monitoring is used to ensure that the live site is available.

pytest
pytest-django
The testing framework.
For creating test data
This helps in testing AWS by mocking AWS services.
For more complex tests where Javascript in the browser is required
Coverage.py
pytest-cov
For ensuring that all the code is being tested. We are currently at 99% coverage.
For monitoring the system during development. Most useful for ensuring that the database is being used efdf
For ensuring the live site is available

Deployment

Deployment needs to be automated and painless. Frequent automation is valuable - on the path to CD - but not necessary at this stage.
For automating deployments using Python
The Linux distro
AWS

We host on Amazon Web Services, using:

  • Amazon EC2 to host Ubuntu
  • Amazon RDS to host MariaDB
  • Amazon SES to send the emails
  • Amazon S3 to store images
The web-server
Officially a python WSGI HTTP Server for UNIX. The connector between Python and Nginx.
Provider of SSL certificates

Communication

As remote workers, communication is vital. We talk twice a week, more if needed.
Video-conferencing
To manage the development work: currently used for both enhancements and bug-tracking.
For moving files that are too large for email
For sharing screenshots with annotations

Miscellaneous

Image editing
For code storage and version control