Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
69 changes: 35 additions & 34 deletions app/join/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,33 +28,35 @@ function Counter({ value, suffix = '', prefix = '' }: { value: number; suffix?:

/* ─── Data ─── */
const benefits = [
{ icon: DollarSign, title: 'Earn More', stat: '$35-55', statLabel: '/hr avg', desc: 'Top pros earn $55+/hr. No middleman cuts. Keep what you earn.' },
{ icon: Calendar, title: 'Your Schedule', stat: '100', statLabel: '% flexible', desc: 'Work when you want. No minimum hours. No forced shifts.' },
{ icon: Zap, title: 'Instant Pay', stat: '24', statLabel: 'hr payouts', desc: 'Get paid within 24 hours. No waiting for bi-weekly checks.' },
{ icon: Shield, title: 'Full Coverage', stat: '$2M', statLabel: 'insured', desc: 'You\'re covered by our $2M liability insurance on every job.' },
{ icon: Smartphone, title: 'Smart App', stat: '1', statLabel: 'tap to accept', desc: 'Jobs pushed to you. Accept with one tap. GPS navigation built in.' },
{ icon: TrendingUp, title: 'Grow', stat: '4.9', statLabel: '★ avg rating', desc: 'Build your reputation. Top-rated pros get priority bookings.' },
{ icon: DollarSign, title: 'Keep ~80%', stat: '80', statLabel: '% you keep', desc: 'No subscriptions, no lead fees. Taskly takes a commission only when you get paid — never before.' },
{ icon: Calendar, title: 'Your Schedule', stat: '100', statLabel: '% flexible', desc: 'Work when you want. No minimum hours, no forced shifts. You choose every job you take.' },
{ icon: Shield, title: 'Protected Pay', stat: '$0', statLabel: 'for leads', desc: 'Every job is funded into escrow before you start — so the money is already there when you finish.' },
{ icon: Zap, title: 'You Set the Price', stat: 'You', statLabel: 'name the rate', desc: 'Make your offer at the price you choose. No platform-set rate, no race to the bottom.' },
{ icon: Smartphone, title: 'Business in a Box', stat: '1', statLabel: 'shareable profile', desc: 'A profile, reviews, payments and a QR code that win you work — on Taskly and off it.' },
{ icon: Star, title: 'Experience Counts', stat: 'Day 1', statLabel: 'start earning', desc: 'Bring the skills you already have. Build a reputation that follows you, from your very first job.' },
];

const steps = [
{ num: '01', title: 'Apply', desc: 'Fill out a 2-minute application. Tell us about your skills and experience.' },
{ num: '02', title: 'Get Verified', desc: 'We run a CPIC background check, verify your ID, and check references.' },
{ num: '03', title: 'Get Equipped', desc: 'Download the Taskly Pro app. Complete onboarding training (30 min).' },
{ num: '04', title: 'Start Earning', desc: 'Go live and start accepting jobs in your area. It\'s that simple.' },
{ num: '01', title: 'Sign up', desc: 'Create your free account in a couple of minutes. Tell us what you\'re great at.' },
{ num: '02', title: 'Get approved', desc: 'We review every applicant and verify your details before you can take work.' },
{ num: '03', title: 'Set up payouts', desc: 'Connect secure payouts through Stripe, so your earnings land straight in your bank.' },
{ num: '04', title: 'Start earning', desc: 'Make offers on local tasks, get hired, and get paid when the job\'s done. That simple.' },
];

// Not testimonials — honest "who it's for" personas (no invented people,
// earnings or ratings). Maps to the JTBD tasker situations in the strategy.
const testimonials = [
{ name: 'Marcus T.', role: 'Cleaner, 8 months', area: 'North York', text: 'I left my agency job and doubled my income. The flexibility is unmatched.', earnings: '$4,200/mo' },
{ name: 'Priya K.', role: 'Cleaner, 1 year', area: 'Mississauga', text: 'As a student, I can work between classes. The instant pay is a lifesaver.', earnings: '$2,800/mo' },
{ name: 'James O.', role: 'Handyman, 6 months', area: 'Scarborough', text: 'Best platform I\'ve worked with. Jobs come to me, I don\'t chase them.', earnings: '$5,100/mo' },
{ name: 'New to the GTA', role: 'Your experience counts here', area: 'Newcomers', text: 'Bring the trade you trained for back home. On Taskly, real skills earn from day one — no Canadian-experience catch-22.', earnings: 'Day 1' },
{ name: 'Between things', role: 'Work around your life', area: 'Students & side-hustlers', text: 'Pick up tasks between classes or shifts. No minimum hours and no forced schedule — you take only what fits.', earnings: 'Flexible' },
{ name: 'Done chasing leads', role: 'Stop paying to maybe get work', area: 'Trades & pros', text: 'No subscriptions, no pay-per-lead. Customers come to you, you keep about 80%, and you\'re paid only when the job\'s done.', earnings: 'No lead fees' },
];

const faqs = [
{ q: 'What are the requirements?', a: 'You need to be 18+, have valid Canadian ID, pass a CPIC background check, and have relevant experience or certification in your service area.' },
{ q: 'How much can I earn?', a: 'Average pros earn $35-45/hr. Top-rated pros with consistent availability earn $55+/hr. You set your own rates within our platform range.' },
{ q: 'When do I get paid?', a: 'Payouts are processed within 24 hours of job completion directly to your bank account. No waiting for bi-weekly checks.' },
{ q: 'Do I need my own supplies?', a: 'For cleaning, Taskly provides a supplies kit on your first day. For maintenance/handyman work, you use your own professional tools.' },
{ q: 'Can I choose my own schedule?', a: 'Absolutely. You set your availability in the app. No minimum hours, no forced shifts. Work as much or as little as you want.' },
{ q: 'What are the requirements?', a: 'You need to be 18+, have a valid Canadian ID and the right to work here, and real experience or skill in what you offer. We review every applicant before approving them.' },
{ q: 'How much can I earn?', a: 'You set your own price on every task you make an offer on. Taskly takes a commission only when you get paid — you keep about 80% — with no subscriptions and no lead fees.' },
{ q: 'When do I get paid?', a: 'Once you mark a job done and the customer confirms, your earnings are released from escrow and paid out securely through Stripe to your bank account.' },
{ q: 'Do I need my own supplies?', a: 'That depends on the task. For most work you bring your own tools and supplies — and the task details spell out exactly what\'s expected before you ever make an offer.' },
{ q: 'Can I choose my own schedule?', a: 'Absolutely. You set your own availability. No minimum hours, no forced shifts. Work as much or as little as you want.' },
{ q: 'What areas do you serve?', a: 'We currently operate across Toronto and the Greater Toronto Area — North York, Scarborough, Etobicoke, Mississauga, Brampton, and more.' },
];

Expand Down Expand Up @@ -354,8 +356,9 @@ export default function JoinPage() {
transition={{ duration: 0.6, delay: 0.8 }}
className="font-sans text-[15px] md:text-[17px] font-400 text-cream/80 leading-[1.7] max-w-[480px] mt-8"
>
Stop working for less than you're worth. Join Toronto's fastest-growing
home services platform and earn on your own terms.
Stop working for less than you're worth — and stop paying for leads
that ghost. Turn your skills into steady income, and get paid only when
the job's done.
</motion.p>

<motion.div
Expand Down Expand Up @@ -387,13 +390,13 @@ export default function JoinPage() {
className="flex flex-wrap gap-8 md:gap-16 mt-16 pt-8 border-t border-cream/[0.15]"
>
{[
{ val: 500, suffix: '+', label: 'Active Pros' },
{ val: 35, suffix: '-55', label: '$/hr Average' },
{ val: 4200, suffix: '+', label: 'Jobs/Month' },
{ val: 0, prefix: '$', suffix: '', label: 'Paid for leads' },
{ val: 80, prefix: '', suffix: '%', label: 'You keep' },
{ val: 0, prefix: '', suffix: '', label: 'Forced shifts' },
].map((s, i) => (
<div key={i}>
<div className="font-display text-[28px] sm:text-[36px] font-800 tracking-[-0.03em] text-cream">
<Counter value={s.val} suffix={s.suffix} />
<Counter value={s.val} prefix={s.prefix} suffix={s.suffix} />
</div>
<div className="font-mono text-[11px] font-600 uppercase tracking-[0.2em] text-cream/82 mt-1">
{s.label}
Expand Down Expand Up @@ -546,7 +549,7 @@ export default function JoinPage() {
className="mb-6"
>
<span className="eyebrow text-rich-black/68">
From Our Pros
Who it&rsquo;s for
</span>
</motion.div>

Expand All @@ -556,7 +559,7 @@ export default function JoinPage() {
viewport={{ once: true }}
className="font-display text-[32px] sm:text-[48px] md:text-[80px] font-800 leading-[0.88] tracking-[-0.03em] mb-16 md:mb-24 max-w-[700px]"
>
They made<br />the switch<span className="text-gold">.</span>
Built for<br />your skills<span className="text-gold">.</span>
</motion.h2>

<div className="grid grid-cols-1 md:grid-cols-3 gap-[1px] bg-rich-black/[0.06]">
Expand All @@ -571,18 +574,16 @@ export default function JoinPage() {
>
{/* Earnings badge */}
<div className="flex items-center justify-between mb-6">
<div className="flex gap-0.5">
{[...Array(5)].map((_, s) => (
<Star key={s} className="w-3.5 h-3.5 text-rich-black fill-rich-black" />
))}
</div>
<span className="inline-flex items-center gap-1.5 font-mono text-[11px] font-700 uppercase tracking-[0.12em] text-rich-black/55">
<Users className="w-4 h-4" strokeWidth={2} /> Could be you
</span>
<span className="font-mono text-[11px] font-700 text-rich-black bg-rich-black/[0.06] px-3 py-1 rounded">
{t.earnings}
</span>
</div>

<p className="font-sans text-[15px] md:text-[16px] font-400 text-rich-black/70 leading-[1.7] flex-1 mb-6">
&ldquo;{t.text}&rdquo;
{t.text}
</p>

<div className="pt-4 border-t border-rich-black/[0.06]">
Expand Down Expand Up @@ -682,7 +683,7 @@ export default function JoinPage() {
Start earning<span className="text-cream/20">.</span>
</h2>
<p className="font-sans text-[15px] font-400 text-cream/75 leading-[1.7] max-w-[460px] mx-auto mb-10">
Join 500+ verified professionals across the GTA who chose better pay, flexible hours, and a platform that respects their work.
Join the GTA locals turning real skills into real income &mdash; better pay, your own hours, and no fees until you get paid.
</p>

<div className="flex flex-col sm:flex-row gap-4 justify-center">
Expand Down Expand Up @@ -711,7 +712,7 @@ export default function JoinPage() {
taskly<span className="text-cream/82">.</span>
</Link>
<span className="font-mono text-[11px] font-500 uppercase tracking-[0.15em] text-cream/72">
&copy; 2025 Taskly.ca &middot; Toronto & GTA
&copy; 2026 Taskly.ca &middot; Toronto & the GTA
</span>
</div>
</footer>
Expand Down
4 changes: 2 additions & 2 deletions app/landing-2/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ import {
} from './sections';

export const metadata = {
title: 'Taskly — Your home, handled. Toronto cleaners on tap.',
title: 'Taskly — Anything on your list, handled. Toronto & the GTA.',
description:
'Vetted, insured cleaners across Toronto and the GTA. Flat prices from $99. Book in 30 seconds or message us on WhatsApp. Built right here.',
'Post anything on your list — type it, say it, or snap a photo — and vetted local Taskers send you offers. You only pay once the work is done. No hidden fees. Built in Toronto for the GTA.',
};

export default function LandingV2() {
Expand Down
Loading