Skip to content

Shared timeline web app with user authentication, posts, and comments. Built with Django and PostgreSQL.

Notifications You must be signed in to change notification settings

lanewells/rooted

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

88 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Log Design

Rooted

Rooted is a family-centered application where relatives can come together to build a shared digital timeline. By uploading written memories, relatives can record and preserve moments and celebrate their family's legacy in a meaningful way.

Rooted

Features

Build Your Family Tree - join with other relatives

Upload Memories

Add text to capture significant moments in the present or past

Attach a date to your memory

Stories and Comments

Share stories and comment on your relatives' posts

Privacy & Security

Your family memories are kept private and secure, accessible only to user with an account.

Tech Stack

Frontend: Python, Django, HTML, CSS

Backend: Django

Database: PSQL

Authentication: Django

Deployment: Heroku, GitHub

Wireframes

Wireframes

New Things I Learned

Reverse_lazy

Reverse lazy is similar to reverse, but is only called when necessary. I used this in several views, including my MemoryCreate view below.

    def get_success_url(self):
        return reverse_lazy('memory-detail', kwargs={'pk': self.object.pk})

UserPassesTestMixin

UserPassesTestMixin enabled me to control access in class-based views by running my custom test functions. Using my MemoryUpdate view as an example, the UserPassesTestMixin ensures that only the user who created the memory can edit it. This also allowed me to repeat access tests more efficiently in my other CBVs.

class MemoryUpdate(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    
    #...

    def test_func(self):
        memory = self.get_object()
        return self.request.user == memory.created_by

Fieldset & legend tags

Fieldset and legend tags are in nearly every form and form view. I played around with the "hidden" (Django-native) form attributes using the dev tools in my browser. This enabled me to target specific values and change the styling to match the other pages.

    <fieldset>
        <legend>Create my account</legend>
        <!--{{ table }}-->
    </fieldset>

SVG & Icon Design

I had fun designing the icons in the navbar and learning about SVGs.

Build Out & Implications

The purpose of my application lies in the build out. While it is functional and fun as a smaller app, the bulk of the functionality (and fun) starts with a timeline view and multimedia uploading capabilities. Here are some other goals I have for the future of Rooted:

Build Out

  • Map view via Google Maps API integration
  • Amazon Web Services for media and file storage
  • Timeline sorting by date, specific date ranges
  • Closed 'Family Tree' groups of relatives
  • PDF, video, image, hyperlink, audio recording capabilities for memories
  • Add tags of custom words and tag other relatives, add locations to memories

Implications

  • Track your ancestor's timeline, fill in blanks, and track their migration or immigration
  • Upload a PDF document of your grandmother's recipe
  • Take a photo on your phone of an old relic
  • Visualize your family tree
  • Upload family health conditions and deepen your understanding of your own genetics

Citations

  1. reverse_lazy Django Docs
  2. @receiver with post_save Django Docs Stack Overflow
  3. date widget in forms Django Docs
  4. FormMixin in CBVs Django Docs
  5. UserPassesTestMixin Classy Class-Based Views
  6. Ashley and Tom

Created by Delaney Wells 2024

About

Shared timeline web app with user authentication, posts, and comments. Built with Django and PostgreSQL.

Topics

Resources

Stars

Watchers

Forks