Skip to content

Instantly share code, notes, and snippets.

@heratyian
Last active March 12, 2024 21:00
Show Gist options
  • Save heratyian/bc391d82ce3e5857778eb95c532d2504 to your computer and use it in GitHub Desktop.
Save heratyian/bc391d82ce3e5857778eb95c532d2504 to your computer and use it in GitHub Desktop.
checkin-functional-spec

Checkin Specification

Checkin sends an email to all members of a team based on the check_in configuration. Members can simply reply to this email and it will create a update record with their reply. As a manager, keeping track of what your direct reports are working on is time consuming. Syncronous meetings are annoying, time consuming, and not effective. Automating checkins via email automates this process and keeps a written record, while being minimally invasive.

User Stories

  • As a lead, I want to create a team, so that I can collaborate with my colleagues on projects.
  • As a lead, I want to invite members to my team by email, so that they can start receiving and responding to check-in prompts.
  • As a member, I want to respond to the morning and evening check-in emails, so that my team can be updated on my daily tasks and accomplishments.
  • As a lead, I want to review all check-in records for my team, so that I can keep track of progress and identify any potential issues early.
  • As a lead, I want to configure check-in settings, such as changing the check-in questions or setting specific check-in times for my team, to tailor the process to our workflow.
  • As an observer or lead, I want to be able to log in and review checkins for everyone on the team
  • As a member, I want to view a history of my check-ins, so that I can review my own progress and contributions over time.
  • As a member, I want to opt-out of automatic check-in emails for a specific team, so that I can manage my email notifications according to my preferences.
  • As a lead, I want to be able to see which team members have opted out of automatic check-in emails, so I can understand their preferred method of communication and ensure everyone is still participating in check-ins.
  • As a lead, I want to generate reports on team check-ins, so I can analyze patterns, productivity, and areas for improvement.

Domain Model

# first_name
# last_name
# email
# password
# timezone
class User
  has_many :memberships
  has_many :teams, through: :memberships
end
# name
# shortname (downcase no spaces)
# description
class Team
  has_many :memberships
  has_many :members, through: :memberships, source: :user
end
# team_id
# user_id
# role (lead, member, observer)
# email_opt_in (boolean, default: true)
class Membership
  belongs_to :team
  belongs_to :user
end
# lead_id
# team_id
# subject ("weekly goals", "eod accomplishments")
# body ("what are you going to work on this week?", "what did you work on today?", etc.)
# ical_recurrence_rule  <!-- "FREQ=WEEKLY;BYDAY=MO,WE,FR;BYHOUR=9;BYMINUTE=0" This rule means the check-in occurs weekly on Monday, Wednesday, and Friday at 9:00 AM. -->
# active (boolean)
# next_at (datetime)
class CheckIn
  belongs_to :lead
  belongs_to :team
  has_many :updates

  def calculate_next_occurrence(from_time = Time.current)
    schedule = IceCube::Schedule.new(from_time)
    schedule.add_recurrence_rule(IceCube::Rule.from_ical(ical_recurrence_rule))
    schedule.next_occurrence(from_time)
  end

  def update_next_at
    self.next_at = calculate_next_occurrence
    save
  end

  # todo: move to scope
  # todo: use with active: true
  def overdue?
    next_at <= Time.current
  end
end
# membership_id
# checkin_id
# content
# created_at
class Update
  belongs_to :member, though: :membership, source: :user
  belongs_to :membership
  belongs_to :check_in
end

Pages

Home/Landing Page

Description: A welcoming page for both logged-in and anonymous users. It briefly describes the purpose of the Checkin application and prompts users to sign in or sign up. Key Elements: Application name, brief description, Sign In/Sign Up buttons (for anonymous users), navigation to other sections (for logged-in users).

Dashboard

Description: The main hub for users after they log in, showing an overview of teams (for leads) or current check-ins (for members). Key Elements: List of teams (with roles if multiple), recent check-in prompts, navigation links or buttons for team management (for leads), user profile access, and logout.

list the teams, check in prompts, recent updates?

Team index show new edit

Description: A page for leads to create new teams or manage existing ones, including inviting members. Key Elements: Form to create a new team (name, shortname, description), list of existing teams with options to edit team settings, invite members via email, and view membership status.

Checkin index show new edit

Description: A page where leads can configure check-in settings for each team, such as setting questions and scheduling. Key Elements: Form to set/edit check-in questions, scheduling options (using a calendar widget for ease), list of current check-in schedules with edit options.

Update index show new edit

Description: A simple form that members are directed to when they click on a link in the check-in email to submit their response. Key Elements: Check-in question displayed at the top, text area for response, Submit button.

Description: A page for leads to review all check-in responses for their team, possibly with filters for date ranges, members, etc. Key Elements: Filters (date range, member), list of check-ins with responses, links to detailed view of each check-in, possibly some analytics or summary of responses.

members will be scoped to only their updates

Devise

Sign Up/Sign In Description: Pages where users can create a new account or log into an existing one. Key Elements: Form fields for email and password (and possibly first name, last name, and timezone for signup), Submit button, links to switch between Sign In/Sign Up, password recovery link.

edit profile Description: Where users can update their personal information, including their timezone, and manage email preferences. Key Elements: Form fields for personal information (first name, last name, email, timezone), options to opt in/out of automatic check-in emails, password change option.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment