Categorygithub.com/Catzkorn/subscrypt
module
0.0.0-20201120175502-b95e275bec47
Repository: https://github.com/catzkorn/subscrypt.git
Documentation: pkg.go.dev

# README

Subscrypt

Meet the Team | Tech Stack | Using Subscrypt | Additional Information

About Subscrypt

Subscrypt was born from the frustration of forgetting when subscriptions are due to be renewed, or forgotten completely, and wasting money on unwanted services. To counter this, we made Subscrypt, a subscription manager application. We allow users to import transactions from their bank via the open banking API and have reoccurring monthly subscriptions filtered into Subscrypt. Users are able to view all their subscriptions and request a calendar reminder for 5 days prior to subscription renewal which is emailed to them. The calendar reminder is a .ics file which can be imported into any popular calendar application.

Users are also able to manually add subscriptions to Subscrypt if they do not wish to integrate their bank to the app or if a subscription is not detected by our filters.

Note: Subscrypt is a proof of concept product, using the Plaid open banking API sandbox and users bank accounts are not able to connect to the app currently.

Go, Team!

Charlotte Brandhorst-Satzkorn ----- Farhaan Ali ------ Veronica Lee

Go, Team! and the Subscrypt project are the final engineering project for the Makers Academy Bootcamp as a part of the September 2020 cohort.

Group goals

The collective aim of the group was to build a project from scratch in a new language. Go was settled on as a language to gain experience with strongly typed languages, the extensive standard library and well documented resources, and employment possibilities for Go engineers.

Our team charter can be viewed here.

Tech Stack

AreaTechnology
LanguagesGo, JavaScript
APIsPlaid, SendGrid
DatabasePostgresql
Testing & CoverageGo Tests
LintingGolangci-lint
CI/CDGithub Actions, Heroku
Additional LibrariesInformation

Using Subscrypt

Initial Setup

Clone the repository: https://github.com/Catzkorn/subscrypt.git

For full functionality you will need to either replace code directly, or store specific information as ENV Variables.

ServiceENV Key NameExample
SendGridSENDGRID_API_KEYDocumentation
DatabaseDATABASE_CONN_STRING"user={your_name} host=localhost port=5432 database=subscryptdb sslmode=disable"
Plaid APISECRETDocumentation
Plaid APICLIENT_IDDocumentation
Email AddressEMAIL"[email protected]"

Database setup

Postgresql is required for this setup.

// Run postgres
psql -c 'CREATE DATABASE subscryptdb;'
psql -d subscryptdb -f db/migrations/database_setup.sql

How to Run

$ go run ./cmd/subscrypt/main.go

Navigate to http://localhost:5000/

How to Use

Add Name and Email

To access the subscription manager, add an email and password (this is not user authentication).

Once details are provided, the subscriptions page will be displayed.

Edit Name and Email

As a user, you are able to edit the name and the email the subscription reminders go to by clicking the pencil icon next to the name and email fields and replacing the contents with the updated versions.

Import Subscriptions

To import subscriptions, click Load from bank account and select Monzo (The other buttons are dummy buttons).

A spinner will show while the transactions are loading.

Add Subscription Manually

To add a subscription manually, press Add a subscription:

Insert the desired subscription details, then press Add subscription.

The subscription will then be show under 'Subscriptions'.

Receive a Calendar Reminder

To receive a calendar reminder, click the envelope next to the desired subscription and an email will be sent to the specified user email address with a .ics file attachment that can be added to the desired calendar application.

Delete a Subscription

To delete a subscription, press the bin icon next to the desired subscription.

Testing

Testing for the project is handled by the Go standard library testing package.

How to Test

// Run tests
$ go test ./...

Test Coverage

// View test coverage per file
$ go test ./... -cover

// Generate a test coverage profile
$ go test ./... -coverprofile=coverage.out

// View coverage report (opens broswer window)
$ go tool cover -html=coverage.out

Additional Information

Future Goals

User Authentication

The current state of the product does not allow for individual user accounts and is limited to a singular user who has the ability to edit their name and email. This feature was left out due to the time constraints of the project, and priority was given to integration of the Open Banking API and Email/Calendar invite API.

Future versions of this product would include users being able to sign up, log in , manage their details and have the ability to delete their account if they wished to.

Subscription Frequencies

We are currently only able to handle monthly subscriptions, which excludes being able to handle users weekly, bi-weekly, quarterly, half or yearly subscriptions. Adding this functionality would provide the user with a more complete experience.

Customisable Reminder Time Frame

The current configuration defaults all calendar reminders to be stored as calendar events 5 days before the subscription is due to renew. Future iterations would allow for the user to determine the time frame in which a reminder would appear before the subscription renewal is due.

Categories and Cost

Subscription categories such as Fitness, Food, Entertainment, etc. could be introduced to allow the user to see a breakdown of subscriptions per category. Additionally, a user would be able to see a breakdown of how much the total of their subscriptions cost for each category, as well as for all of their subscriptions.

Frontend Testing

At present our frontend is only manually tested due to time constraints and a late decision to move to JavaScript/JSON API. Future iterations of the project would include testing these aspects to ensure full functionality and consistent user experience.

Attributions

Hero Icons

Thank you to Heroicons for providing MIT-licensed SVG icons which have been used as a part of our frontend design.

Learn Go with Tests

A massive thank you to Chris James for Learn Go with Tests which was extensively used by Go, Team! at the start of the project and an excellent learning resource for diving into the Go world.

GoTest

Thank you Jaana Dogan who published GoTest, which improves the accessibility of go tests.

Wiki

Our wiki can be found here

# Packages

No description provided by the author