DEV Community

Karan Mehta
Karan Mehta

Posted on

Crafting my Code Chronicles Blog

Creating my blog was an amazing learning experience, highlighting the importance of thoughtful planning and incorporating valuable resources. Previously, my approach lacked a Minimum Viable Product (MVP), resulting in a chaotic blog. However, with insights from senior engineers and resources from Chris at GoRails, I embarked on a journey to reconstruct and document the technical process.

Database Structure:

Descriptive DB Design

Scopes for Dynamic Content Sorting

  def draft?
    published_at.nil?
  end 

  def published?
    published_at? && published_at <= Time.current
  end 

  def scheduled?
    published_at? && published_at > Time.current
  end
Enter fullscreen mode Exit fullscreen mode

I then used ActiveRecord to query these methods:

  scope :sorted, -> { order(arel_table[:published_at].desc.nulls_first).order(updated_at: :desc) }
  scope :draft, -> { where(published_at: nil)}
  scope :published, -> { where("published_at <= ?", Time.current)}
  scope :scheduled, -> { where("published_at > ?", Time.current)}
Enter fullscreen mode Exit fullscreen mode

Utilizing these scopes in my model facilitated seamless handling of different scenarios based on the user's sign-in status.

  def index 
    if user_signed_in?
      @blog_posts = BlogPost.all.sorted
      @pagy, @blog_posts = pagy(@blog_posts)
    else
      @blog_posts = BlogPost.published.sorted
      @pagy, @blog_posts = pagy(@blog_posts)
    end 
  end
Enter fullscreen mode Exit fullscreen mode

Design

The design phase, powered by Tailwind CSS, was a thrilling endeavor. Investing time in envisioning the blog's appearance through sketches laid the groundwork for a visually appealing and user-friendly interface. One thing I noticed with Tailwind CSS is that the code seems packed and congested which may cause confusion when wanting to change it. For now, it's a tool that is really handy till I master Javascript and the frameworks that power it.

Tailwind CSS snippet

Project Organization

GitHub Projects emerged as a pivotal tool for orchestrating tasks. This approach, inspired by agile methodologies, involved breaking down the project into phases and manageable tickets. From noting scenarios and creating user stories to task breakdowns within sprints, the agile workflow streamlined the development process.

Languages and Framework

  • Ruby - 3.2.2
  • Rails - 7.0.4.3

Database

  • PostgreSQL

Gems

  • Tailwind CSS
  • Devise for Authentication and Authorization
  • Pagy for Pagination
  • RSpec for Testing
  • Launchy
  • Orderly

In summary, my blog transformation journey encompassed a robust database structure, elegant design with Tailwind CSS, and an organized project management approach via GitHub Projects.

As I update this blog with more features, I'll dive deeply into techniques I use and my overall experiences as a developer.

Here is the site: Karan's Blog -- Feedback is always welcome, please shoot me an e-mail at: karanm645@gmail.com

Top comments (0)