Skip to content

Commit 49c762b

Browse files
committed
+ SF Ruby configuration
1 parent ecf16fd commit 49c762b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+357
-73
lines changed

README.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ bundle exec rspec --tag type:system
5151

5252
### Logging in
5353

54-
In development, use a corresponding record from `db/seeds.rb` or log in via Google or GitHub. If you need admin access, use `admin: true`, or login as a developer using the following email: `admin@redprints.test`.
54+
In development, use a corresponding record from `db/seeds.rb` or log in via Google or GitHub. If you need admin access, use `admin: true`, or login as a developer using the following email: `karl@sfruby.com`.
5555

5656
### Admin console
5757

@@ -228,9 +228,6 @@ Add your logo by updating the `frontend/components/Logo.tsx` component. That's i
228228

229229
You may want to add your conference name and various links to some Inertia pages and components as well as mailer templates—just do that! The React UI is not meant to be magically configurable, tune it up to your needs (but prefer to stick to the page props, so you don't need to touch the backend).
230230

231-
> [!TIP]
232-
> Search for the `FIXME: ...` and `EXAMPLE Conference` comments in the codebase to see the bits to be updated with your information.
233-
234231
### Admin
235232

236233
Go to `config/initializers/avo.rb` and update the corresponding configuration. See [Avo docs](https://docs.avohq.io/3.0/branding.html).

app/controllers/home_controller.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,16 @@ class HomeController < ApplicationController
44
def index
55
session[:redirect_on_auth] = root_path
66
render inertia: {
7-
oauth_providers: OmniAuth.providers
7+
oauth_providers: OmniAuth.providers,
8+
startup_cfp: serialize(CFP.startups)
9+
}
10+
end
11+
12+
def startups
13+
session[:redirect_on_auth] = startups_path
14+
render inertia: {
15+
oauth_providers: OmniAuth.providers,
16+
startup_cfp: serialize(CFP.startups)
817
}
918
end
1019
end

app/frontend/components/Footer.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ export function Footer() {
55
<footer className="bg-secondary-800 text-cloud-500 sticky bottom-0 w-full py-8">
66
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
77
<div className="border-secondary-400 mt-8 flex flex-col items-center justify-between border-t pt-6 md:flex-row">
8-
{/* FIXME: Add your conference name */}
98
<p className="text-secondary-400 text-sm">
10-
&copy; {currentYear} Example Conference
9+
&copy; {currentYear} SF Ruby Conference
1110
</p>
1211
</div>
1312
</div>

app/frontend/components/Logo.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
export function Logo() {
2-
return <img src="/logo.png" className="h-12" />;
2+
return <img src="/sfruby.png" className="h-6" />;
33
}

app/frontend/entrypoints/inertia.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ void createInertiaApp({
1212
// Set default page title
1313
// see https://inertia-rails.netlify.app/guide/title-and-meta
1414
//
15-
// FIXME: Replace with your application's title
16-
title: (title) => (title ? `${title}, CFP App` : "CFP App"),
15+
title: (title) => (title ? `${title}, SF Ruby CFP` : "SF Ruby CFP"),
1716

1817
// Disable progress bar
1918
//

app/frontend/pages/home/index.tsx

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ import {
88

99
import Layout from "../../components/Layout";
1010
import { OAuthButtons } from "../../components/OAuthButtons";
11+
import type { CFP } from "../../serializers";
1112

1213
interface IndexProps {
1314
oauth_providers: string[];
15+
startup_cfp: CFP;
1416
}
1517

16-
export default function Index({ oauth_providers }: IndexProps) {
18+
export default function Index({ oauth_providers, startup_cfp }: IndexProps) {
1719
const { user, cfp_closed } = usePage().props;
1820

1921
return (
@@ -23,20 +25,30 @@ export default function Index({ oauth_providers }: IndexProps) {
2325
Call for Proposals
2426
</h1>
2527
<p className="text-cloud-50 max-w-3xl text-lg">
26-
Share your knowledge and experience at the EXAMPLE conference!
28+
Share your Ruby knowledge and experience at the{" "}
29+
<a
30+
className="underline"
31+
href="https://sfruby.com"
32+
target="_blank"
33+
rel="noreferrer"
34+
>
35+
San Francisco Ruby Conference 2025
36+
</a>
37+
. We’re looking for talks to support and inspire the new generation of
38+
successful startups built on Ruby and Rails.
2739
</p>
2840
<div className="text-primary-100 mt-8 flex flex-wrap gap-4">
2941
<div className="flex items-center">
3042
<CalendarIcon className="mr-2 h-5 w-5" />
31-
<span>Neverber 39-40, 2025</span>
43+
<span>November 19-20, 2025</span>
3244
</div>
3345
<div className="flex items-center">
3446
<MapPinIcon className="mr-2 h-5 w-5" />
35-
<span>Olympus Mons, Mars</span>
47+
<span>Fort Mason, San Francisco</span>
3648
</div>
3749
<div className="flex items-center">
3850
<UsersIcon className="mr-2 h-5 w-5" />
39-
<span>1500+ Attendees</span>
51+
<span>400+ Attendees</span>
4052
</div>
4153
</div>
4254
</div>
@@ -50,7 +62,7 @@ export default function Index({ oauth_providers }: IndexProps) {
5062
<div className="space-y-6">
5163
<p>
5264
Thank you for your interest in speaking at our conference! We’re
53-
excited to invite proposals for talks in the following tracks:
65+
excited to invite proposals for talks in two tracks:
5466
</p>
5567
<ul className="list-disc space-y-2 pl-6">
5668
<li>
@@ -103,8 +115,8 @@ export default function Index({ oauth_providers }: IndexProps) {
103115
</p>
104116
<ul className="list-disc space-y-1 pl-6">
105117
<li>CFP opens: June 4, 2025</li>
106-
<li>CFP closes: July 13, 2035</li>
107-
<li>Notifications: July 21, 2035</li>
118+
<li>CFP closes: July 13, 2025</li>
119+
<li>Notifications: July 21, 2025</li>
108120
</ul>
109121
</div>
110122
</div>
@@ -117,6 +129,10 @@ export default function Index({ oauth_providers }: IndexProps) {
117129
<p>Selected speakers will receive:</p>
118130
<ul className="list-disc space-y-2 pl-6">
119131
<li>A complimentary conference ticket</li>
132+
<li>
133+
A travel stipend (up to $500 for domestic travel, $1,000 for
134+
international travel)
135+
</li>
120136
<li>Invitation to the speaker dinner</li>
121137
</ul>
122138
<p>
@@ -149,7 +165,7 @@ export default function Index({ oauth_providers }: IndexProps) {
149165
{!cfp_closed && (
150166
<>
151167
<h3 className="mb-6 text-xl font-bold">
152-
Ready to share your expertise?
168+
Ready to share your Ruby expertise?
153169
</h3>
154170
<p className="mb-8 text-neutral-600">
155171
We welcome proposals from speakers of all experience levels.
@@ -185,6 +201,28 @@ export default function Index({ oauth_providers }: IndexProps) {
185201
</div>
186202
</div>
187203

204+
{!startup_cfp.is_closed && (
205+
<div
206+
className="card border-secondary-800 animate-slide-up border"
207+
style={{ animationDelay: "0.2s" }}
208+
>
209+
<h3 className="mb-4 text-xl font-bold">
210+
Building a startup with Ruby?
211+
</h3>
212+
<p className="mb-6 text-neutral-600">
213+
Demo your startup at the conference! Share your story to inspire
214+
others, and connect with some of the best Ruby minds! All
215+
startup demos will be 10 minutes.
216+
</p>
217+
<Link
218+
href={`/startups`}
219+
className="btn btn-secondary flex items-center justify-center"
220+
>
221+
Call for Startups
222+
</Link>
223+
</div>
224+
)}
225+
188226
<div
189227
className="card border-secondary-800 animate-slide-up border"
190228
style={{ animationDelay: "0.2s" }}
@@ -194,9 +232,8 @@ export default function Index({ oauth_providers }: IndexProps) {
194232
If you have any questions about the CFP process or need help with
195233
your proposal, feel free to reach out to our team.
196234
</p>
197-
{/* FIXME: Replace with your contact email */}
198235
<a
199-
href="mailto:conference@example.com"
236+
href="mailto:conference@sfruby.com"
200237
className="text-primary-600 hover:text-primary-800 inline-flex items-center font-medium transition-colors"
201238
>
202239
Contact the CFP team
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
import { Link, usePage } from "@inertiajs/react";
2+
import {
3+
CalendarIcon,
4+
FileTextIcon,
5+
MapPinIcon,
6+
UsersIcon,
7+
} from "lucide-react";
8+
9+
import Layout from "../../components/Layout";
10+
import { OAuthButtons } from "../../components/OAuthButtons";
11+
import type { CFP } from "../../serializers";
12+
13+
interface StartupsProps {
14+
oauth_providers: string[];
15+
startup_cfp: CFP;
16+
}
17+
18+
export default function Startups({
19+
oauth_providers,
20+
startup_cfp,
21+
}: StartupsProps) {
22+
const { user } = usePage().props;
23+
24+
return (
25+
<Layout currentUser={user}>
26+
<div className="from-secondary-700 to-secondary-900 shadow-medium animate-fade-in mb-12 rounded-xl bg-gradient-to-b p-8 text-white">
27+
<h1 className="mb-4 text-3xl font-bold text-white md:text-4xl">
28+
Call for Startups
29+
</h1>
30+
<p className="text-cloud-50 max-w-3xl text-lg">
31+
The{" "}
32+
<a
33+
className="underline"
34+
href="https://sfruby.com"
35+
target="_blank"
36+
rel="noreferrer"
37+
>
38+
San Francisco Ruby Conference
39+
</a>{" "}
40+
is excited to open our Call for Ruby Startups!
41+
</p>
42+
<p className="text-cloud-50 max-w-3xl text-lg">
43+
{" "}
44+
Let’s bring your ambitious story into the spotlight: demo your product
45+
among the other rising stars, inspire the next generation of Rubyists
46+
and connect with the brightest Ruby minds.
47+
</p>
48+
<div className="text-cloud-100 mt-8 flex flex-wrap gap-4">
49+
<div className="flex items-center">
50+
<CalendarIcon className="mr-2 h-5 w-5" />
51+
<span>November 19-20, 2025</span>
52+
</div>
53+
<div className="flex items-center">
54+
<MapPinIcon className="mr-2 h-5 w-5" />
55+
<span>Fort Mason, San Francisco</span>
56+
</div>
57+
<div className="flex items-center">
58+
<UsersIcon className="mr-2 h-5 w-5" />
59+
<span>400+ Attendees</span>
60+
</div>
61+
</div>
62+
</div>
63+
64+
<div className="grid grid-cols-1 gap-12 lg:grid-cols-2">
65+
<div className="animate-slide-up space-y-8">
66+
<div>
67+
<h2 className="text-secondary-800 mb-4 text-2xl font-bold">
68+
Proposal Guidelines
69+
</h2>
70+
<div className="space-y-6">
71+
<p>
72+
We’re looking for innovative Ruby startups to showcase their
73+
products in 10-minute demo sessions.
74+
</p>
75+
<p>
76+
If you’re building something exciting with Ruby or Rails, we
77+
want to hear from you.
78+
</p>
79+
</div>
80+
</div>
81+
82+
<div>
83+
<h2 className="text-secondary-800 mb-4 text-2xl font-bold">
84+
Selection Process
85+
</h2>
86+
<div className="space-y-4">
87+
<p>
88+
Applications are open until all demo slots are filled. Demos are
89+
reviewed and confirmed on a rolling, first-come, first-served
90+
basis—so please apply early!
91+
</p>
92+
<p>
93+
<span className="font-medium">Important dates:</span>
94+
</p>
95+
<ul className="list-disc space-y-1 pl-6">
96+
<li>CFP opens: June 4, 2025</li>
97+
</ul>
98+
</div>
99+
</div>
100+
101+
<div>
102+
<h2 className="text-secondary-800 mb-4 text-2xl font-bold">
103+
Speaker Benefits
104+
</h2>
105+
<div className="space-y-4 text-neutral-700">
106+
<p>
107+
Selected speakers will receive complimentary conference tickets
108+
(one per startup).
109+
</p>
110+
</div>
111+
</div>
112+
</div>
113+
114+
<div className="space-y-8 lg:pl-8">
115+
<div
116+
data-test-id="home-actions"
117+
className="card border-secondary-800 animate-slide-up border"
118+
style={{ animationDelay: "0.1s" }}
119+
>
120+
{!startup_cfp.is_closed && (
121+
<h3 className="mb-6 text-xl font-bold">
122+
Ready to introduce your startup to the Ruby world?
123+
</h3>
124+
)}
125+
{startup_cfp.is_closed && (
126+
<h3 className="mb-6 text-xl font-bold">
127+
The call for startups is now closed
128+
</h3>
129+
)}
130+
<p className="mb-8 text-neutral-600"></p>
131+
<div className="flex flex-col space-y-2">
132+
{!user &&
133+
oauth_providers.map((provider: string) => (
134+
<div key={provider}>{OAuthButtons[provider]()}</div>
135+
))}
136+
137+
{user && !startup_cfp.is_closed && (
138+
<Link
139+
href={`/startups/new`}
140+
className="btn btn-secondary flex items-center justify-center"
141+
>
142+
Submit a Demo Proposal
143+
</Link>
144+
)}
145+
146+
{user && (
147+
<Link
148+
href={`/proposals`}
149+
className="btn btn-outline flex items-center justify-center"
150+
>
151+
<FileTextIcon className="mr-2 h-5 w-5" />
152+
View My Proposals
153+
</Link>
154+
)}
155+
</div>
156+
</div>
157+
158+
<div
159+
className="card border-secondary-800 animate-slide-up border"
160+
style={{ animationDelay: "0.2s" }}
161+
>
162+
<h3 className="mb-4 text-xl font-bold">Have questions?</h3>
163+
<p className="mb-6 text-neutral-600">
164+
If you have any questions about the selection process or need help
165+
with your demo proposal, feel free to reach out to our team.
166+
</p>
167+
<a
168+
href="mailto:conference@sfruby.com"
169+
className="text-secondary-800 hover:text-primary-800 inline-flex items-center font-medium transition-colors"
170+
>
171+
Contact the CFP team
172+
<span className="ml-1"></span>
173+
</a>
174+
</div>
175+
</div>
176+
</div>
177+
</Layout>
178+
);
179+
}

app/frontend/pages/proposals/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export default function Index({ proposals }: IndexProps) {
5757
<>
5858
<p className="text-cloud-700 mx-auto mb-8 max-w-md">
5959
Share your knowledge with the Ruby community by submitting a
60-
proposal for EXAMPLE Conference.
60+
proposal for SF Ruby Conference.
6161
</p>
6262
<Link
6363
href={`/proposals/new`}

app/frontend/pages/proposals/show.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ export default function Show({ proposal, speaker, cfp }: ShowProps) {
234234
<>
235235
<p className="text-accent-800">
236236
Congratulations! Your proposal has been accepted. We’re
237-
excited to have you speak at EXAMPLE Conference.
237+
excited to have you speak at SF Ruby Conference.
238238
</p>
239239
</>
240240
)}

0 commit comments

Comments
 (0)