Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
726bd04
Updated readme
NewtonMutugi May 12, 2025
804e6a3
Updated READMe.md
NewtonMutugi May 12, 2025
8c1069d
Removed unnecessary exclamations
NewtonMutugi May 12, 2025
9c2659a
hero page update
Annastacia-dev Mar 1, 2026
1db8529
hero fix + stats section
Annastacia-dev Mar 1, 2026
5183695
update about us page
Annastacia-dev Mar 1, 2026
4f81ab8
theme switcher
Annastacia-dev Mar 1, 2026
cd8fd35
update activties section
Annastacia-dev Mar 1, 2026
b364b93
update to keep dynamic data reading
Annastacia-dev Mar 1, 2026
1b49307
update sponsors page
Annastacia-dev Mar 1, 2026
f59529a
updated sponsors section
Annastacia-dev Mar 1, 2026
1e6c5d1
update footer section
Annastacia-dev Mar 1, 2026
3d6b26e
update hero page ruby conf
Annastacia-dev Mar 1, 2026
f768558
update meetup frequency from weekly to monthly
Annastacia-dev Mar 1, 2026
1cc2ac3
update sign in page
Annastacia-dev Mar 1, 2026
3fa09b7
update flash message design
Annastacia-dev Mar 1, 2026
f2070a5
update sign up page
Annastacia-dev Mar 1, 2026
52c369f
update about us page
Annastacia-dev Mar 1, 2026
e6c0a59
chapters Page
Annastacia-dev Mar 1, 2026
8b6ba0e
projects page
Annastacia-dev Mar 1, 2026
be2bf29
redesign learning materials page
Annastacia-dev Mar 1, 2026
ce1bd84
Merge branch 'main' of github.com:African-Ruby-Community/arc_platform
Annastacia-dev Mar 1, 2026
30278fc
update
Annastacia-dev Mar 1, 2026
05b458e
Merge branch 'main' into redesign-landing-page
Annastacia-dev Mar 1, 2026
54a3301
fix activities section
Annastacia-dev Mar 1, 2026
ce47c26
try fix projects page
Annastacia-dev Mar 1, 2026
fcb6608
fix projects
Annastacia-dev Mar 2, 2026
350b92d
fix community projects header
Annastacia-dev Mar 2, 2026
794d399
Merge branch 'main' of github.com:African-Ruby-Community/arc_platform
Annastacia-dev Mar 16, 2026
7bafa30
Merge branch 'main' into redesign-landing-page
Annastacia-dev Mar 16, 2026
529175f
migrate
Annastacia-dev Mar 16, 2026
e137864
fix: update navbar and hero to redesigned version after merge
Annastacia-dev Mar 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# ⚠️ THIS REPO HAS BEEN MOVED: [NEW LINK](https://github.com/African-Ruby-Community/arc_platform) ⚠️

# Africa Ruby Community (ARC) Platform

[![Arc Platform CI Workflow](https://github.com/African-Ruby-Community/arc_platform/actions/workflows/ci.yml/badge.svg)](https://github.com/African-Ruby-Community/arc_platform/actions/workflows/ci.yml)
Expand Down Expand Up @@ -51,7 +53,7 @@ Access app at `http://localhost:3000`
Install dependencies for compiling Ruby:

* macOS: Install Homebrew

```sh
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
Expand Down
Binary file added app/assets/images/auth-community.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/assets/images/conference.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/assets/images/hero-community.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/assets/images/meetup.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/assets/images/workshop.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 5 additions & 1 deletion app/controllers/landing_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@

class LandingController < ApplicationController
# People should not require authentication for following actions
skip_before_action :authenticate_user!, only: %i[index about learn]
skip_before_action :authenticate_user!, only: %i[index about activities learn]
def index; end

##
# About us page
def about; end

##
# Activities page
def activities; end

##
# Featured learning materials
def learn; end
Expand Down
1 change: 1 addition & 0 deletions app/controllers/projects_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
class ProjectsController < ApplicationController
skip_before_action :authenticate_user!, only: %i[index show]
before_action :set_project, only: %i[show]
skip_before_action :authenticate_user!, only: %i[index show]

# GET /projects or /projects.json
def index
Expand Down
20 changes: 20 additions & 0 deletions app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,24 @@

module ApplicationHelper
include Pagy::Frontend

SOCIALS = [
{ alt_key: 'social_media.twitter', link: 'https://twitter.com/ruby_african', image: 'brands_twitter.png',
show: true },
{ alt_key: 'social_media.telegram', link: '#', image: 'brands_telegram.png',
show: FeatureFlag.find_by(name: 'telegram')&.enabled },
{ alt_key: 'social_media.facebook', link: 'https://www.facebook.com/rubycommunity.africa',
image: 'brands_facebook.png',
show: true },
{ alt_key: 'social_media.instagram', link: 'https://www.instagram.com/africanruby_community/', image: 'brands_instagram.png', show: true },
{ alt_key: 'social_media.linkedin', link: 'https://www.linkedin.com/company/african-ruby-community/',
image: 'brands_linkedin.png', show: true },
{ alt_key: 'social_media.github', link: 'https://github.com/nairuby', image: 'brands_github.png', show: true }
].freeze

def socials
SOCIALS.map do |social|
social.merge(alt: I18n.t(social[:alt_key]))
end
end
end
94 changes: 86 additions & 8 deletions app/helpers/chapters_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,36 @@
# rubocop:disable Metrics/ModuleLength
module ChaptersHelper
ACTIVITIES = [
{ image: 'activities_local_meetups.png', title_key: 'activities.meetups' },
{ image: 'activities_local_conferences.png', title_key: 'activities.conferences' },
{ image: 'activities_local_programming.png', title_key: 'activities.programming' },
{ image: 'activities_local_workshops.png', title_key: 'activities.workshops' },
{ image: 'activities_local_hackathons.png', title_key: 'activities.hackathons' }
{
image: 'activities_local_meetups.png',
title: 'Local Meetups',
description: 'Monthly gatherings in cities across East Africa where developers share knowledge and network.',
svg_paths: '<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/>'
},
{
image: 'activities_local_conferences.png',
title: 'Conferences',
description: 'RubyConf Africa brings together the best minds in the Ruby ecosystem for talks, workshops, and collaboration.',
svg_paths: '<path d="M2 3h20"/><path d="M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3"/><path d="m7 21 5-5 5 5"/>'
},
{
image: 'activities_local_programming.png',
title: 'Programming',
description: 'Collaborative coding sessions, pair programming, and open-source contributions to the global Ruby ecosystem.',
svg_paths: '<path d="m18 16 4-4-4-4"/><path d="m6 8-4 4 4 4"/><path d="m14.5 4-5 16"/>'
},
{
image: 'activities_local_workshops.png',
title: 'Workshops',
description: 'Hands-on workshops for all skill levels, from Ruby fundamentals to advanced Rails development.',
svg_paths: '<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/>'
},
{
image: 'activities_local_hackathons.png',
title: 'Hackathons',
description: 'Competitive hackathons challenging developers to build innovative solutions using Ruby technologies.',
svg_paths: '<path d="M6 9H4.5a2.5 2.5 0 0 1 0-5H6"/><path d="M18 9h1.5a2.5 2.5 0 0 0 0-5H18"/><path d="M4 22h16"/><path d="M10 14.66V17c0 .55-.47.98-.97 1.21C7.85 18.75 7 20.24 7 22"/><path d="M14 14.66V17c0 .55.47.98.97 1.21C16.15 18.75 17 20.24 17 22"/><path d="M18 2H6v7a6 6 0 0 0 12 0V2Z"/>'
}
].freeze

CHAPTERS = [
Expand Down Expand Up @@ -53,6 +78,57 @@ module ChaptersHelper
{ image: 'sponsors/previous/andela.png', link: 'https://andela.com/', alt_key: 'sponsors.previous.andela' }
].freeze

PROJECTS = [
{
title: 'Nairuby Website',
description: 'The official Nairuby chapter website showcasing events and community resources.',
tags: ['Ruby', 'Rails', 'Community'],
stars: '240',
github_url: 'https://github.com/nairuby',
url: '#'
},
{
title: 'ARC Learning Platform',
description: 'An open-source platform for sharing Ruby learning resources and tutorials.',
tags: ['Ruby', 'Education', 'Open Source'],
stars: '189',
github_url: 'https://github.com/nairuby',
url: '#'
},
{
title: 'Ruby Dev Tools',
description: 'A collection of developer tools built by the community to improve Ruby workflows.',
tags: ['Ruby', 'Tools', 'Utilities'],
stars: '156',
github_url: 'https://github.com/nairuby',
url: '#'
},
{
title: 'Community Contribution Guide',
description: 'Comprehensive guide to contributing to Ruby projects and open source.',
tags: ['Documentation', 'Open Source'],
stars: '312',
github_url: 'https://github.com/nairuby',
url: '#'
},
{
title: 'ARC Conference App',
description: 'Mobile-first app for our annual Ruby Conference with schedule and networking features.',
tags: ['Ruby', 'Rails', 'Events'],
stars: '98',
github_url: 'https://github.com/nairuby',
url: '#'
},
{
title: 'Ruby Best Practices',
description: 'A curated collection of Ruby best practices and design patterns from community experts.',
tags: ['Ruby', 'Best Practices', 'Guide'],
stars: '467',
github_url: 'https://github.com/nairuby',
url: '#'
}
].freeze

SOCIALS = [
{ alt_key: 'social_media.twitter', link: 'https://twitter.com/ruby_african', image: 'brands_twitter.png',
show: true },
Expand All @@ -68,9 +144,7 @@ module ChaptersHelper
].freeze

def activities
ACTIVITIES.map do |activity|
activity.merge(title: I18n.t(activity[:title_key]))
end
ACTIVITIES
end

def chapters
Expand All @@ -89,6 +163,10 @@ def previous_sponsors
end
end

def static_projects
PROJECTS
end

def socials
SOCIALS.map do |social|
social.merge(alt: I18n.t(social[:alt_key]))
Expand Down
10 changes: 8 additions & 2 deletions app/javascript/controllers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,11 @@ application.register("removals", RemovalsController)
import TurboFramesController from "./turbo_frames_controller.js"
application.register("turbo_frames", TurboFramesController)

import TurnstileController from "./turnstile_controller.js"
application.register("turnstile", TurnstileController)
import NavbarController from "./navbar_controller.js"
application.register("navbar", NavbarController)

import ThemeController from "./theme_controller.js"
application.register("theme", ThemeController)

import ProjectSearchController from "./project_search_controller.js"
application.register("project-search", ProjectSearchController)
17 changes: 17 additions & 0 deletions app/javascript/controllers/navbar_controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
static targets = ["menu", "openIcon", "closeIcon"]

toggle() {
this.menuTarget.classList.toggle("hidden")
this.openIconTarget.classList.toggle("hidden")
this.closeIconTarget.classList.toggle("hidden")
}

close() {
this.menuTarget.classList.add("hidden")
this.openIconTarget.classList.remove("hidden")
this.closeIconTarget.classList.add("hidden")
}
}
31 changes: 31 additions & 0 deletions app/javascript/controllers/project_search_controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
static targets = ["input", "card", "empty", "count"]

filter() {
const query = this.inputTarget.value.trim().toLowerCase()
let visible = 0

this.cardTargets.forEach(card => {
const text = card.dataset.searchText.toLowerCase()
const match = !query || text.includes(query)
card.style.display = match ? "" : "none"
if (match) visible++
})

if (this.hasEmptyTarget) {
this.emptyTarget.style.display = visible === 0 ? "" : "none"
}

if (this.hasCountTarget) {
this.countTarget.textContent = `${visible} project${visible === 1 ? "" : "s"}`
}
}

clear() {
this.inputTarget.value = ""
this.filter()
this.inputTarget.focus()
}
}
8 changes: 8 additions & 0 deletions app/javascript/controllers/theme_controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
toggle() {
const isDark = document.documentElement.classList.toggle("dark")
localStorage.theme = isDark ? "dark" : "light"
}
}
23 changes: 22 additions & 1 deletion app/views/chapters/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,28 @@
<div class="p-5 sm:p-6">
<h3 class="text-xl font-bold mb-2 group-hover:text-red-600 transition-colors"><%= chapter.name %></h3>
</div>
</div>
<% end %>
</div>

</div>
</section>

<%# Start a Chapter CTA %>
<section class="border-t border-zinc-200/50 dark:border-zinc-800/50 bg-white dark:bg-zinc-950 py-24 md:py-32 transition-colors duration-300">
<div class="mx-auto max-w-4xl px-6 text-center">
<h2 class="text-4xl font-bold tracking-tight text-zinc-900 dark:text-white md:text-5xl mb-6">
Want to Start a Chapter?
</h2>
<p class="text-lg text-zinc-600 dark:text-zinc-400 mb-8 leading-relaxed">
Interested in building the Ruby community in your city? We'd love to help you establish
a new ARC chapter. Connect with us to get started.
</p>
<%= link_to new_user_registration_path,
class: "inline-flex items-center gap-2 rounded-md bg-red-600 px-8 py-3 text-sm font-semibold text-white hover:bg-red-700 transition-colors" do %>
Get in Touch
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-4 h-4">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"/>
</svg>
<% end %>
</div>

Expand Down
Loading
Loading