Populus Engineering Blog

Change log for Populus web client and API

v1.1.3 // 2019-5-18

The following bug fixes and enhancements have been made:

  • Listers can create links to sell one item at a time

  • Cookie conditions banner has been added

  • Terms and Conditions have been added

  • Links now have a gallery of images

  • Material-UI has been selected as the base CSS framework. Refactoring has begun slowly, so be on the lookout for a hot new version coming soon!

v1.1.2 // 2019-4-20

Populus now has Listers!

Listers are our partners that actually produce the goods. When you pitch into an order for your favorite designer or event, your payment will immediately get routed to their Stripe account. With money in hand immediately, the printers spend less time waiting for checks to clear, and more time serving up hot designs. Huge shout-out to Peak AZ Apparel for being our founding partner!

In addition, the following bug fixes and enhancements have been made:

  • Open Graph meta tags have been added for enhanced SEO

  • Password reset and Email Confirmation has been incorporated

  • You can now buy more than one item at a time!!

  • You can now get in touch with our partners by sending design requests!

  • The popup of other contributors for an order has been fixed

  • Garbage collecting cron task has been implemented

  • Terms of Service added to new user account creation

v1.1.1 // 2019-1-13

The following bug fixes and enhancements have been made:

  • The crowdfund page displays other users who joined in

  • The checkout form was refactored due to an event handler bug

  • The crowdfund page got a hot new media query for a better desktop experience

v1.1.0 // 2018-12-30

The following enhancements have been made:

  • ImageModal was created so you windows shop even better. Tap the image on the crowdfund page to enhance the pixels

  • Crowdfunds are now assigned to an "organization" which is displayed on the crowdfund card

v1.0.0 // 2018-11-14

Populus is live!

Populus is currently composed of two unique parts -- a web client and an API.

Web Client

Our web client was scaffolded on Next.js, which permits for a very modular development experience. One of the chief demands for Populus is an ease of link sharing, so Next's built-in server side rendering allows users to share links to crowdfunds easily. Next.js is fairly opinionated, but configuring the server to support our needs was fairly simple, and putting it into production has been even easier. Outside of a few dependencies (mainly secure checkout forms and webpack plugins), the web client is built entirely in house. All style sheets were written by Michael Fox, and utilize CSS3's flexbox component to easily create fluid and responsive layouts.

API

The API is an Express.js HTTP server that serves as a layer of abstraction between the website users see, and where we store our data. Speaking of which, we've switched from Firebase to postgreSQL for our persistent layer, and utilize pg-promise to sanitize user input.

Stripe is used to handle the authorization, capture, and refund of payments. User credit card information is token-ized on the front end using Stripe's secure checkout forms, and the charge receipt is stored in our database in reference to the user object. When the reserve is met on an order, the API recalls the pending charges from the database, and captures the hold.

Node-scheduler is used to garbage collect orders that have expired, and will inform the API to refund a charge if the reserve wasn't met on the order.

SendGrid is used to send templatized emails to users as notifications.

Architecture

Development of Populus was built around a distributed set of centralized services. The two servers (Web Client and API) run on independently secured Digital Ocean droplets running Ubuntu 16.04. Nginx is employed as a reverse proxy server to the Node.js processes and server logger, all encrypted through Let's Encrypt's free SSL certbot.

This architecture was chosen due to the ease of integrating external services to the overall Populus project. React Native is being used to build the mobile app prototypes, and by separating the web client from the API, we can easily achieve a seamless experience across platforms. Additionally, we encourage integration with other services, such as chat bots, RSS feeds, or other software services. If you are interested, please reach out to fox@populus.app.

Last updated