Wellfire Interactive // Expertise for established Django SaaS applications

Develop and manage Django SaaS applications

How do you make the most of an investment in a Django application? What things do you need to plan for maintaining a SaaS application using Django?

The articles and videos here have been shared to answer these questions. They include general tips for developing with Django and specific advice about working with legacy Django sites that you won't find anywhere else.

Improving and Maintaining Existing Django Sites

Necessary complexity in existing Django apps

Simplify to improve; but sometimes it's not possible or reasonable to simplify difficult to understand code. Understand why this can be the case in your Django project and some strategies for mitigating these issues.

Technical debt

Like financial debt, technical debt serves a purpose, and like financial debt, once it's allowed to snowball servicing the debt can become all consuming. Know why your Django project has technical debt, how to assess it, and how to deal with it.

Great Tests, Bad Tests, No Tests, Slow Tests

Tests can make it harder to make changes to your Django site. Not just *missing* tests, but slow tests and bad tests which cause programmer pain, misdirected efforts, and false confidence. What do these four flavors of test look like and how can you correct for the troubled ones?

The Sources of Friction in Legacy Django Projects

Whether months or years after launch, it can become increasingly painful to make changes to any application, Django-based sites included. An overview of some of the causes and an introduction to the series.

Managing and Helping Customers

Help yourself: customer facing documentation

A little knowledge can go a long way, and often suffices to empower customers to solve their own problems by giving them the knowledge they need.

Guiding new users with an onboarding process

User, or more accurately customer success, is not guaranteed just because your application has a great test suite or an amazing interface. Deliberately guiding them through steps to learn your application and establish familiarity helps improve user - and customer - success.

Meet Django Organizations

An account, a user, an identity, but not all at once. A Django app for providing multi-user accounts and the steady march to 1.0

Table for two: designing multiple user accounts

Users and accounts needn't be confused. Let your customers work together by supporting multiple users per account.

Adding Basic Multi-Tennancy to Django Sites Using Subdomains

Put subdomains to work and build dynamic multi-tennant applications.

Squashing and Preventing Bugs

Great Tests, Bad Tests, No Tests, Slow Tests

Tests can make it harder to make changes to your Django site. Not just *missing* tests, but slow tests and bad tests which cause programmer pain, misdirected efforts, and false confidence. What do these four flavors of test look like and how can you correct for the troubled ones?

Safe Content Updates Through Testing

Your content is an asset - you already know this - but this also includes the rich web of links on and outside your site that bring people to your site and help lead them through your content. When your site goes through an update that involves updating your URLs, how do you make sure you're not left with broken links and bad search results? A brief introduction to pyresttest for smoketesting and testing URL mappings.

An Introduction to Automated Visual QA: Continuous Cross-browser Screenshots

Building a collection of cross-browser screenshots with BrowserStack and CircleCI

Building Better Web Apps with Django

Integrating static sites with Django using Vue.js

Static websites have great performance, security, and simple data management. With the right tools, we can add these static site benefits to our Django site.

Simplify Media File Management by Migrating to Django Filer

django-filer is a great tool for reusing uploaded content across Django sites. It's an easy choice for new projects, but what about existing projects? Painless steps for migrating existing image and file uploads to django-filer.

How to Control Content Rivers Using Featured Items, Django CMS, and PostgreSQL

Using Django CMS to select featured items from a content river in a way that's intuitive for both designers and editors.

One Database Model, Many Behaviors: A Practical Introduction to Django Proxy Models

While proxy models aren't the most critical feature in the Django framework, they do seem to get short shrift. Here's a look into how to use this feature to create new and clean interfaces to data without making changes to your database.

Invoking Builds: Deployment and Project Task Patterns

Using Fabric and the new Invoke to simplify and codify both development and deployment patterns.

Generic CSV data exports in Python

Whether for sharing with third parties, outside analytics work, or simply content extraction, many sites need to provide data export functinality, and in a user friendly way to boot. Comma separated format fits the bill in most cases - it's portable and spreadsheet friendly, and its something developers and the non-tech savvy can work with right away.

How to Add Complex Search Filters in a Django - Without Using a Search Engine

Most search requirements are pretty simple and can be satisfied without a search backend. Keeping the code clean and testable is easier with this manager based design pattern.

Easy Web Content Snippets with Django-Addendum

Easily edit arbitrary text snippets on a site without a full-fledged CMS or issuing another site release. Like a mini-CMS for every site.

Stretching Haystack's ElasticSearch Backend: Customizing the Django Search Experience

Haystack makes integrating ElasticSearch into Django projects a breeze, but custom configuration takes a little bit more work.

Adding Basic Multi-Tennancy to Django Sites Using Subdomains

Put subdomains to work and build dynamic multi-tennant applications.

How to Serve Protected Content With Django (Without Bogging Down Your Application Server)

Using Nginx's X-Accel-Redirect you can apply permissions to files served directly by Nginx or combine Django and WordPress in the same URL paths.

Deploying Django Sites Using the 12-Factor Pattern: Flexibility, Portability, and Maintainability

Better environment configuration, inspired by Heroku, borrowed from Foreman.

Editing image uploads with Python

Ditch Photoshop: making on-the-fly edits and enhancements to images using Python.

Create Human Readable URLs in Django That Don't Break

You can use Django's URL routing to create easy to read URLs that can keep up with content changes.

Building Effective User Experiences

Integrating static sites with Django using Vue.js

Static websites have great performance, security, and simple data management. With the right tools, we can add these static site benefits to our Django site.

How to Maintain a Mobile Friendly Site (And Maintain Google Your Ranking)

Google will update their search indexing rubric on April 21, 2015 to better serve mobile-friendly results to mobile users. The lack of a mobile-friendly site after this update will result in lower search rankings for your website. Here's what you can do to be ready, keeping yourself and your users happy.

Seeing to the Unseen: Performance, Accessibility, & Security in User Experience Design

Performance, accessibility, and even security all effect the user experience. Each has a significant effect on the perception of your product, especially when bad planning turns into less-than-desirable results.

Let's Do This: An Introduction to User Experience Toolsets

User Experience (UX) design is anchored by its foundations in psychology and sociology, centering around the human experience. The application of UX, like its foundations, relies on observable theory and continual discussion, often coming down to a matter of informed opinion. These opinions range from its best practices right down to its tools.

Stylus: a new arrow for your design quiver

Why we chose the Node.js based CSS preprocessor and an introduction to using it to power up your CSS.

Taking Control of User-generated Content

User-generated content is something that we as web developers, designers, and managers struggle with attempting to control; we don’t know what our users will write or how they’ll write it. Regain control of your user generated content with the power of HTML5 and CSS3.

Reducing Risk and Improving Delivery

What's the Difference Between Requirements and Specifications?

It can feel productive to start specifying how a project will work from the very start, from workflows to designs. This is almost always a dangerous illusion and a reliable way of making an exact and flawed product.

An Introduction to Automated Visual QA: Continuous Cross-browser Screenshots

Building a collection of cross-browser screenshots with BrowserStack and CircleCI

Invoking Builds: Deployment and Project Task Patterns

Using Fabric and the new Invoke to simplify and codify both development and deployment patterns.

Table for two: designing multiple user accounts

Users and accounts needn't be confused. Let your customers work together by supporting multiple users per account.

Development Commandments for Collaboration

Rules for working together, staying sane, and shipping quality product.

An Illustrated Git-based Development Workflow

A sensible Git-based workflow for small teams and open source projects.

Managing Web Content

Safe Content Updates Through Testing

Your content is an asset - you already know this - but this also includes the rich web of links on and outside your site that bring people to your site and help lead them through your content. When your site goes through an update that involves updating your URLs, how do you make sure you're not left with broken links and bad search results? A brief introduction to pyresttest for smoketesting and testing URL mappings.

Taking Control of User-generated Content

User-generated content is something that we as web developers, designers, and managers struggle with attempting to control; we don’t know what our users will write or how they’ll write it. Regain control of your user generated content with the power of HTML5 and CSS3.

Content migration: archival sites

A fallback strategy for migrating content on large and disorganized sites

Content migration: site links and SEO

Protecting valuable links for users and search engines is an important step in any site migration

Content migration: basic strategy

Replacing an established website necessities a good content migration plan