IFF (If and Only If) ⇔

In logic and related fields such as mathematics and philosophy, if and only if (shortened iff) is a biconditional logical connective between statements. (Wikipedia) :metal:

IFF is an online "get to do" list rather than a to-do list. You get to do a thing if and only if you complete the task or tasks you need to do.

Project Overview

Traditional to-do lists are typically comprised of unpleasant tasks or chores that need to be done, with no system of rewards. Studies have shown that temptation bundling, or coupling an unpleasant task with a reward, is a more effective way to get things done. IFF will allow users to combine pleasant and unpleasant tasks, and use social accountability as a motivating tool.

The IFF website will allow users to create an account, in which they will be able to store multiple "get-to-do" lists. Each list will have one get-to-do task and one or more to-do tasks. As the to-do tasks are checked off, the get-to-do task becomes available.

Example list:

I get to:

  • [ ] play Xbox for one hour


  • [ ] clean the garage
  • [x] send the final proposal to my boss
  • [ ] work on my app for one hour

IFF will use Django in the backend to store user accounts and user lists. It will use VueJS in the frontend to display each list and provide basic functionality.

Core technologies:

  • Django backend
  • PostgreSQL for the user and list database
  • VueJS frontend
  • Materialize CSS for style
  • Docker for containerization
  • Deploy on AWS ECS

Potential users:

  • Employees with set daily tasks
  • Anyone who needs to do chores at home
  • People trying to get in shape/lose weight can reward themselves for going to the gym, etc.
  • Parents who want to give their kids incentives to do their chores
  • Anyone who currently uses a to-do list app

Monetization: While the app will be launched as a free service initially, future monetization is possible via the following:

  • Paid account levels with additional features:
    • Free accounts can be capped at ~10 lists at a time, while monthly subscribers get unlimited lists and possible additional features such as shared lists.
  • Paid iOS/Android app:
    • Future iOS/Android versions can be downloaded from app stores for a fee


The user starts on the landing page, which will look like so:

Image of landing page

A user signs up, and creates their first IFF list. They enter one get-to-do and how ever many to-dos they want.

Once a user has an account, their home screen shows a list of all of their IFF lists. If they click on one, they go to a detail page where they can see all their to-do items and can check them off. If all of a get-to-do's to-do items are checked off, they get a message saying they can now do their reward task, and the whole list disappears.

Users can also have a history (archive) of all of the things they've done and have gotten to do in the past.

Image of list page

Data Model

There are three main data models:

  1. User

    • One-to-One relationship with Django User model, + extra fields
    • Name
    • username
    • is_new_user? boolean - if true, get welcome screen
    • email (not shown)
    • password (not shown)
    • profile pic ImageField
    • short bio (300 chars)
    • goals (where the user adds their top goals - 300 chars)
    • friends (for future versions when users can share lists with friends)
  2. List of IFF Tasks

    • text of one get to do item
    • can you do the get-to-do? boolean
    • is the get-to-do completed? boolean
    • user id of owner of list
    • created date (for sorting)
    • completed date
    • is the whole list completed? boolean (for archiving)
  3. Individual IFF to-do task

    • text of task
    • foreign key to IFFlist task is part of
    • is it completed? boolean

The User model includes the user's login information, a profile picture, and all of their active and archived IFF lists. Future versions of IFF will add a social media aspect to the user profile, connecting users as friends and letting them see each others' IFF lists and even keep each other accountable by verifying that the to-do tasks were in fact completed (via photo or something like that).

The IFF Task model is just one get-to-do item followed by at least one to-do item. Each new task is an instance of the IFF model.


  1. Landing page
    • Register modal
    • Login sidebar
  2. New user welcome page with first IFFlist
    • User profile completion sidebar on right
  3. Add IFFlist page
    • Current/past lists sidebar on left
  4. Detail view for IFFlist


Milestone 1

Due date: March 30th

  • Register domain
  • Add placeholder to domain (redirect to github for now)
  • Set up Cookiecutter Django
    • understand WTF is going on with the files in it?
  • Set up Docker
  • Set up PostgreSQL database
  • Set up Django rest framework
    • understand WTF it does
  • Set up Django project
    • determine Django IFFlist models
    • determine Django class-based views
    • determine User model
  • Set up basic frontend design
    • set up base HTML file
    • set up all template HTML files
    • set up MaterializeCSS and make it play nice with everything else
    • set up navbar
    • set up landing page changing text
  • Set up login and registration
    • set up register/login modal
    • set up user sidebar
    • set up user photo upload
    • sign out with modal, not new page

At the end of the week, the entire project is set up, including installing cookiecutter Django with Postgres and MailHog and getting them to play nicely together in a virtual env Docker (yikes!). A rough front-end including the landing page and user log-in screen is completed.

Milestone 2

Due date: April 6th

  • Set up user registration ability
  • Set up auto email to user after registration, with confirmation link
  • Set up forgot password email/reset link
  • Set up welcome page for new user - add first ifflist
  • Set up VueJS project
  • Set up profile sidebar and ability to add profile pic and bio
  • Set up views with mixins to display current and completed ifflists
  • Set up add to-do capability
  • Set up ability to save, complete and archive to-do lists
    • Write functions for adding, completing and editing todos
    • Write function to make get-to-do completion check appear only after todos have been completed
  • Finish front-end design of ifflist and ifflist lists (really need a better name)

Ability for users to register and add lists is complete. It doesn't have to look pretty yet.

Milestone 3

Due date: April 13th (Capstone presentation day)

  • Make dropdown menu work in mobile
  • Check all pages in mobile view for good UX
  • make JQuery onboarding guide for new users (if time)
  • add social page/links to tell friends
  • Test adding users, adding lists, saving
  • Design IFF logo, finalize color scheme
  • Present capstone!

An MVP of IFF is deployed and live, with the ability for users to sign up. The frontend is finalized.

Milestone 4

Due date: April 20th

  • Fix API post security issue!
  • improve general mobile UX
  • Add https/SSL certificate
  • Deploy MVP on the interwebs using AWS ECS

User testing and debugging with actual users.

Milestone 5

Due date: May 31st

  • Get classmates/friends to sign up for initial testing
  • add "sticky" ifflist option
  • add Vue functionality to home page, so links go to specific ifflists
  • in mobile view, make "Add ifflist" link go to add ifflist view
  • Move user login/register/password interaction stuff into Vue views rather than Django views for better UX
  • Add email reminders (that can be turned on or off) for completing of tasks

All bugs fixed and mass roll-out of platform. Functionality limited to signing up and adding up to 10 IFF lists at a time.

Milestone 6

Due date: Fall 2018

  • Profit?

Add social aspect to platform. Users can become friends, invite their friends, and show lists to friends who will keep them accountable.

Milestone 7

Due date: end of 2018

Monetization of platform. Add premium monthly plan for unlimited lists.

Milestone 8

Due date: Q1 2019

Monetization of platform. Add team premium tier where multiple people can share lists.

Milestone 9

Due date: Q2 2019

Launch iOS and Android apps, Mac desktop app in the menu bar?

Milestone 10

Due date: ?

Sell IFF to Mark Zuckerberg and retire to a private island.

Feature Requests

(for future versions)

Bug/feature spreadsheet: https://docs.google.com/spreadsheets/d/1of64JAw58ZcHRoA9sZqPyIhAF6ELwZjz0C8T4awcO6A/edit?usp=sharing

  • IFF/OR?
  • Recurring events - ability to make an ifflist repeat every day/week/whatever
  • Sticky ifflist - one list that's "sticky" and always on top
Share this project: