Chaz Arvizu - PortfolioChaz Arvizu - Portfolio
Home
Resume
  • LiftJourn (Mobile Application)
  • MealApp (Name Pending)
  • Gym Rat (Senior Design Class)
  • Lorenz Attractor
  • Solar System Simulation
  • Stranger Things Intro
Home
Resume
  • LiftJourn (Mobile Application)
  • MealApp (Name Pending)
  • Gym Rat (Senior Design Class)
  • Lorenz Attractor
  • Solar System Simulation
  • Stranger Things Intro
  • LiftJourn (Mobile Application)

LiftJourn (Mobile Application)

LiftJourn Logo

Informational Website

www.liftjourn.com Informational website for LiftJourn users. (Created using Nuxt.js)

Apple App Store Link

LiftJourn on IOS LifJourn on the Apple App Store

Project Milestones

March 2024

Production Start

Started production on Django backend and Vue.js frontend

May 2024

Vue.js Beta Deployed

Deployed Django backend and Vue.js frontend to Digital Ocean

Early June 2024

Vue.js Beta Version Discontinued

I wanted to create a native running application instead of a web app

Early June 2024

Expo Production Started

Started to implement native version of LiftJourn

Mid June 2024

Integrated ChatGPT API

AI functionalities of app working, huge milestone

August 2024

Cleaning Frontend & Backend Code

Cleaning up the codebase before beta release, adding caching for performance boost

Mid September 2024

Gathered Feedback From Beta Testers

Implemented feedback I received from my beta testers (added features, bug patches, etc.)

September 22, 2024

Released version 1.0.0 LiftJourn

Released LiftJourn on Apple App Store!

Description

LiftJourn is a native application that allows users to create workout routines, track their workouts, and view their friend's completed workouts. LiftJourn provides the user with an easy-to-use and convenient way to keep track of their workouts to see their progress over time. LiftJourn has both a free version and a premium version available to users. The premium version allows more functionality with AI and statistical analysis. I have designed and developed this application all as a solo developer, learning Django, Vue.js and Expo as I develop the application.

Collage Icon

Technology Stack

Frontend: Expo & Nuxt.js

Expo Icon

Expo

Expo is a powerful framework and platform for creating universal React applications. It revolutionizes the development process by allowing quick and easy creation of native apps for both iOS and Android from a single codebase. I've chosen Expo to build the frontend of LiftJourn's mobile application, leveraging its robust toolset and streamlined deployment process.

Key Features of Expo:

  1. Cross-Platform Development: Build for iOS and Android simultaneously, saving time and resources.
  2. Over-the-Air Updates: Push updates to your app without going through app store review processes.
  3. Pre-built Components: Access a wide range of pre-built UI components and API modules.
  4. Expo SDK: Provides a comprehensive set of APIs for accessing device and system functionality.
  5. Managed Workflow: Simplifies the development process by abstracting away complex native build configurations.

Why Expo for LiftJourn?

  • Rapid Prototyping: Expo's hot reloading and instant previews accelerate the development cycle.
  • Consistent Data Management: The Expo frontend consumes the same Django REST API that the Vue.js web app did, ensuring data consistency across platforms.
  • Community Support: Expo has a large, active community, providing extensive resources and third-party libraries.
  • Scalability: As LiftJourn grows, Expo can be "ejected" for more fine-grained control over the native code.

Development Tools

Expo CLI

Expo CLI is a command-line tool that serves as the primary interface for developing, building, and publishing Expo projects. It offers commands for:

  • Creating new projects
  • Starting development servers
  • Building standalone apps
  • Publishing updates
Expo Go

Expo Go is a powerful tool for mobile app developers, especially those working on cross-platform applications without access to both iOS and Android environments. As a developer using a Windows PC and an Apple iPhone, Expo Go has been invaluable in my workflow:

  1. Easy Testing: It allows for immediate testing on a physical Apple device without needing a MacOS environment.
  2. Simple Setup: Just download the Expo Go mobile app and scan the QR code that appears in the console after running npx expo start.
  3. Real-time Updates: The app bundles your code on-the-fly, allowing for instant testing of changes.
  4. Device Features: Expo Go provides access to device-specific features with a development build, enabling comprehensive testing.
Nuxt Icon

Nuxt.js (Static Site)

Nuxt.js is a powerful and flexible framework built on top of Vue.js, which made working with Nuxt.js easier due to my prior experience with Vue.js. For LiftJourn, I'm utilizing Nuxt.js to develop the static informational site, leveraging its robust features for server-side rendering, static site generation, and improved SEO capabilities.

Why Nuxt.js for LiftJourn's Informational Site?

  • SEO Optimization: Server-side rendering and static site generation improve search engine visibility.
  • Performance: Fast loading times due to pre-rendered content and optimized assets.
  • Developer Experience: Intuitive project structure and conventions speed up development.
  • Nuxt Modules: Extends functionality with a wide range of community-built modules.
  • Scalability: Easy to start small and scale up as the project grows.
  • Familiarity: My past experience with Vue.js made adopting Nuxt.js easy

Static Site Generation for LiftJourn

For the LiftJourn informational site, I'm leveraging Nuxt.js's static site generation capabilities:

  1. Content Creation: Writing content in Markdown or using a headless CMS.
  2. Page Generation: Nuxt.js pre-renders all pages at build time.
  3. Asset Optimization: Automatically optimizes images and CSS for faster load times.
  4. Deployment: Easily deployable to static hosting platforms, in my case, Digital Ocean App Platform.

This approach ensures that the informational site is fast, SEO-friendly, and cost-effective to host, providing an excellent user experience for visitors looking to learn about LiftJourn before downloading the app.

Django Icon

Backend: Django

Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. Django also offers great documentation along with many online resources for learning the framework. I use the Django REST framework as my backend API which is consumed by my Expo frontend.

Key Features of Django:

  1. ORM (Object-Relational Mapping): Django's ORM allows you to interact with databases using Python code instead of SQL.
  2. Admin Interface: Django provides an automatic admin interface for managing your application's data.
  3. URL Routing: Django's URL dispatcher maps URLs to views, making it easy to design clean and elegant URLs.
  4. Security Features: Django includes protection against common web vulnerabilities like CSRF, XSS, and SQL injection.

Why Django?

  • Scalability: Django can handle high-traffic websites, making it suitable for both small and large-scale projects.
  • Versatility: It's used in various domains, from content management systems to social networks and scientific computing platforms.
  • "Batteries Included" Philosophy: Django comes with many built-in features, reducing the need for third-party libraries.

Django REST Framework

The Django REST Framework(DRF) is a powerful toolkit that provides many different solutions for building backend APIs. The DRF offers support/tools for Serialization, Requests/Responses, Class Based Views and Authentication/Permissions.

Key Features of Django REST Framework:

  1. Serialization: Converts complex data types, such as querysets and model instances, to Python datatypes that can then be easily rendered into JSON, XML, or other content types.
  2. Authentication: Includes plugins for JWT authentication.
  3. Viewsets: Combines the logic for a set of related views in a single class.
  4. Browsable API: Provides a web browsable API, which is a huge win for developer usability.

Why Use Django REST Framework?

  • Flexibility: Can be used for everything from simple JSON APIs to complex hyperlinked APIs.
  • Customization: Highly customizable - you can use regular function-based views if you prefer.
  • Community: Large and active community, which means good support and frequent updates.

Database: PostgreSQL

PostgreSQL is the best-supported database for Django. It offers a wide range of advanced features, including support for complex queries, indexing, full-text search, and JSON data types.

OpenAI Icon

OpenAI: GPT-4o-mini API

The GPT-4o-mini API is a very powerful tool for integrating Artificial Intelligence functionalities into an application. In my use case, the 4o-mini model is a very accurate and affordable model to help boost the users experience. LiftJourn utilized the API in the following functionalities: Personalized Workout Routines, Exercise Statistical Analysis, and Autofill for Workouts Based on Past Data.

Digital Ocean Icon

Deployment: Digital Ocean

DigitalOcean is a cloud service provider that offers competitive pricing, with a straightforward pricing model that includes transparent pricing for all of their services. It also provides simple documentation, making it easy for developers to set up and manage servers, databases, and other cloud infrastructure components.

Digital Ocean App Platform

I used their app platform to deploy my application, following the Django documentation here to initially set up my Django backend. I then added a static site to serve my frontend via a Content Delivery Network (CDN). The app platform provides a simple way for deploying new changes via GitHub; as a developer, all you have to do is push your changes to the main branch, and Digital Ocean will automatically build and redeploy your changes. This promotes a much more agile development process by streamlining the deployment process.

Services

Github

Version control system. All my code is uploaded to a private GitHub repository.

Gmail API

Liftjourn utilizes a Google Cloud service account to impersonate a noreply email for user email validation when a user registers. Securities such as SPF, DKIM and DMARC records have been implemented to help prevent third parties from sending an email from my domain.

SPF

Sender Policy Framework, tells what servers are able to send emails on behalf of my domain.

DKIM

Domain Keys Identified Mail, allows for me to sign every message that is sent from my mail server with a private key, which is then checked with the public key stored in the DNS record to ensure I was the one actually sending the message.

DMARC

Domain-based Message Authentication Reporting and Conformance, tells what should happen to a message if it doesn't PASS the SPF and DKIM checks. I currently have mine set to the most strict level, which rejects any message that doesn't pass both SPF and DKIM.

Namecheap

Namecheap offers domain registration, hosting, and other services at a fair price. Namecheap also has a great user interface and tools for managing DNS records, which makes the process much more intuitive.

Features

  • User authentication and authorization
  • Workout routine creation and management
  • Workout tracking and progress visualization
  • Social features for viewing friends' workouts

Future Plans

  • Implement additional social features (view friends' profiles, challenge other friends)
  • Enhance workout tracking statistics analysis for premium users
  • Improve user interface and user experience with feedback from users
Last Updated:
Contributors: ChazArvizu