Approximately 40% — my contribution
The initial website framework and main structure, project direction, deciding what to build, selecting and reviewing changes, and bringing the pieces together.
RelaySkills is an independent student project founded and created by a 13-year-old Indian high school student, with substantial AI assistance.
This page documents authorship, acknowledges help and service providers, and explains how the website actually works. It is separate from the time-credit ledger and the Privacy Policy.
I’m a 13-year-old Indian high school student, and I founded relayskills. I built RelaySkills as my own independent project over one week. I wanted to explore how people could learn from one another by sharing practical skills instead of relying only on money.
I built the main website framework and initial structure myself, then used AI to help develop the rest of the experience: ideas, supporting pages and content, additional implementation, debugging, refinement and testing. “Independent” means I was the student creator directing this project—not that every line, asset or idea was produced without assistance.
The initial website framework and main structure, project direction, deciding what to build, selecting and reviewing changes, and bringing the pieces together.
Supporting implementation and static page content, exploring ideas, debugging, code explanations, interface refinements and help with verification.
The one-week timeline and contribution split are the creator’s own account. The percentages are an approximate description of overall effort, not an independently measured count of code, hours or ownership. AI-generated work still requires human review; responsibility for the submitted project remains with its creator.
The build brought together a skill-exchange concept, an initial interface, linked pages, member accounts, a Cloudflare Worker, persistent D1 records, R2 integration code, and repeated revisions. As features were added, the work also involved connecting forms to real storage, finding inconsistencies, correcting navigation and making the interface behave across screen sizes. The project remains a learning experience, not a claim that every production problem was solved in a week.
I would like to thank my mentors and teachers for their guidance, encouragement and support in helping me reach this stage. Thank you to the people who were part of my learning journey and encouraged me to keep asking questions, improving the project and understanding what I was building.
Credited by the creator for generating the RelaySkills logo used in the website’s branding. The logo was selected and incorporated into the project; this acknowledgement does not imply sponsorship.
Credited for idea generation and helping explore possible directions for the platform. Ideas were considered and selected as part of the creator’s own project decisions.
Credited for AI-assisted implementation, supporting page content, debugging, refactoring, tests, interface fixes and explanations of how the code works. Its assistance also helped replace unsupported sample claims with recorded-data displays.
The published site uses Cloudflare Workers for request handling, D1 for structured application records, and Cloudflare’s deployment and delivery infrastructure. The code includes an R2 binding configuration for future permitted object storage, but R2 is not enabled in the current deployment. This acknowledgement does not imply sponsorship or endorsement.
The shared site shell loads the configured measurement tag G-5BVDPY48YM for website usage measurement, subject to the site’s analytics controls and the provider’s policies.
These acknowledgements do not mean the running website sends user messages to Leonardo.Ai, DeepSeek, OpenAI, or a general cloud language model for the local RelaySkills guide. Provider use is limited to the functions described in the Privacy Policy; third-party names, trademarks, and licences remain with their owners.
RelaySkills uses a multi-page frontend and a Cloudflare Worker backend. Pages are ordinary HTML files. Shared CSS gives them a common appearance, and JavaScript adds navigation, preferences, forms, search and asynchronous updates. The Worker serves the pages and the application’s same-origin JSON API.
Opening an HTML file directly only opens the frontend. Account saving, messaging and other persistent features need the published Worker or a supported local preview. Both frontend and API use relative, same-origin URLs, so the browser does not need a separate public API address.
The published datastore is Cloudflare D1, a managed SQLite-compatible database bound to the Worker as DB. It contains account information and collections for supported features. The project’s Worker supports an R2 bucket binding for permitted uploads, but that binding is not enabled in the current deployment, so new media uploads are unavailable until activation. A local preview may use a separate local adapter and local data; local and live records are not the same dataset.
Some interface preferences and local helper state use localStorage. That storage belongs to the current browser and device; it is not account-wide cloud storage. Server-backed settings and records use API requests. The interface should not describe a local-only selection as a real enrollment, booking or submitted report.
Registration and login are handled by the Worker. Passwords are stored as one-way password hashes rather than readable passwords. A signed, HttpOnly session cookie identifies the session; signing protects integrity, not secrecy. Account and administrator permissions are checked on protected routes. Write requests use a CSRF token to help prevent another website from submitting actions through a signed-in browser.
Profiles store teaching skills, learning interests, location preferences, language, timezone and other settings. Visibility rules limit what another member can see. Profile editing shows unsaved changes, a saving state and confirmation after a successful response. A departure warning helps prevent accidental loss of edits; a failed save leaves the edits available to retry.
Discovery reads public profile and offer records. Matching runs in the Worker and compares the learner’s needs with eligible members. It uses explicit rules rather than a trained recommendation model: skill fit, learning goal, teaching style, session format, schedule overlap, language, proficiency, session history and reliability. Each result includes the points awarded and explanations. These are compatibility scores, not a proven percentage chance of success.
The current maximum weights are 35 for skill fit, 10 each for goal, style and format, 15 for shared availability, 8 for language, 5 for proficiency, 4 for session history and 3 for reliability. A strict search can exclude weak skill matches. Availability comparisons use timezone-aware windows over the next eight days. Missing history is disclosed rather than replaced with invented reviews.
Conversations and messages are persisted on the server. Access checks determine which participants can read a conversation or attachment. The interface supports operations such as unread indicators, typing updates, blocking, reporting and group management. Message updates use repeated HTTP requests rather than a WebSocket service. A report creates a record for administrator review; it is not an automatic guarantee of resolution.
Student-account safeguards include age-derived restrictions, member-selected profile visibility, and guardian-consent review fields. These are application safeguards, not proof of identity or a guarantee of safety. Administrators still need to review concerns and apply appropriate policies.
Signed-in members can publish a workshop from Host a workshop. The server checks the title, future start time, IANA timezone, duration, capacity and learning outcomes, and assigns the signed-in member as host. Each newly hosted workshop creates one shared calendar event and meeting thread. Reservations add attendees to that event; cancelling one place leaves other attendees booked. The host manages the schedule, cancellation and completion through Calendar, with changes reflected in the workshop listing. Existing workshops and accounts are retained.
Calendar records store participants, start and end times, timezone, reminders and changes. Times are normalized and converted for display. Workshop registration records capacity and attendance-related state. A background reminder worker creates platform notices when due. Calendar export uses ICS files and Google/Outlook event-composer links; it is not two-way OAuth calendar synchronization.
Video rooms use browser media APIs and WebRTC. Camera and microphone access require browser permission. The Worker handles room permissions and exchanges connection-signaling data; peer connections carry the media. Network conditions can require configured STUN/TURN infrastructure, and large calls would require a different media-server architecture. A successful page load alone does not verify video connectivity on every network.
Time credits are internal exchange units, not currency or a bank account. The ledger stores payments, one-credit one-way exchange transfers, streak milestone rewards, adjustments and refunds with references and resulting balances. Streak rewards are 25 credits at 7 days, 100 at 30, 400 at 100, and 1,000 at 365, once per milestone. A transfer checks the amount and balance before recording the outgoing and incoming entries. Disputes are reviewed through administrator tools. Corrections create further entries rather than silently rewriting the original transaction. Merely passing a scheduled end time does not prove an exchange occurred or automatically settle a payment.
Time credits are the transferable account balance used for exchanges and Gifts & vouchers. Other activity records may still appear in member portfolios for context, but there is no separate catalogue or automatic prize-claim system connected to them.
The innovation area stores member proposals, comments and support activity, with additional review handling for student submissions. Marketplace records support offers and purchases in internal credits. Funding pledges record expressions of support; no payment processor transfers money. The learning journal stores a member’s own reflections and practice minutes. Achievements are calculated from recorded account activity; they are not accredited certificates.
Feedback is saved with a publication-permission choice. Public testimonials include only permitted public fields; an email address is not included in the public testimonial response. Newsletter sign-up validates the email and consent, saves it, and exposes the list only to administrators. The administrator can copy addresses and send updates manually. The website does not claim to have sent an email just because a subscription was recorded.
The admin panel provides account controls, content review, reports, disputes, recorded-data charts and the newsletter list. Administrative actions are logged. The charts are drawn using the browser’s Canvas API, with values calculated from records—not preset decorative datasets.
RelaySkills AI matches questions to a local knowledge base of website topics using keywords and spelling similarity, then returns guidance and relevant links. It is not the same as the AI tools used to build this project. The current implementation does not use a general cloud language model for these answers, and it should not be treated as an expert or a source of verified personal advice.
Existing content, including starter workshops, ideas and feedback, is preserved and displayed. Public summary numbers come from /api/platform/metrics, and public record cards come from /api/public/content. Visible summaries refresh every 5 seconds while the page is active and refresh again when the user returns. This is polling-based freshness, not a claim of instant streaming.
Zero means a measured empty collection. “No data yet” means an average has no ratings. “Unavailable” means the statistics request failed. “Compatibility error” means required statistics are missing or invalid: restart the updated server and refresh. Saved accounts and content are included regardless of starter IDs. These are counts of saved records, not claims that every entry is independently verified or organically created. Historical records are retained, not deleted.
Pages without a connected course catalogue, formal certification service or published resource collection state that limitation. Fabricated participation totals, outcomes, testimonials and progress bars have no place as evidence of actual activity.
Third-party projects retain their own names, rights and licences. Acknowledgement is not a claim of endorsement or a replacement for licence compliance. The live integration list is intentionally limited: Cloudflare delivery and D1 storage, Google OAuth where enabled, Google Analytics measurement, Boxicons delivery, and browser APIs described above. R2 is configured in code but is not active in the current deployment.
| File or area | Responsibility |
|---|---|
*.html | Individual pages, form markup and accessible structure. |
Shared brand stylesheet and styles/ | RelaySkills visual tokens, components, layout, page styling and floating navigation. |
| Shared RelaySkills shell script | Navigation, footer, preferences, metrics refresh and website-wide interactions. |
| Account and community modules | Authentication UI, profile editing, community views and administrator tools. |
| Operations and session modules | Inbox, calendar, credit operations and browser call behavior. |
| Platform and workspace modules | Feature-specific forms, rendering, discovery and account workspaces. |
| Live data and content modules | Recorded public cards, empty/error states and live summary strips. |
| Cloudflare Worker | Same-origin routes, validation, permissions, persistence calls, matching and feature logic. |
| D1 and R2 bindings | Structured application records and permitted object uploads. These are not public downloadable source examples. |
wrangler.jsonc, build scripts and deployment configuration | Worker-compatible asset packaging, bindings, migrations, and deployment setup. |
tests/ and focused checks | Regression checks and implementation/setup documentation. |
The /api/ routes are RelaySkills application endpoints—not a collection of external paid services. For example, /api/auth/me describes the current session, /api/profile saves profile changes, /api/matches computes matches, /api/calendar returns permitted calendar information, and /api/credits returns the signed-in member’s ledger. Administrator routes require administrator access.
Forms send structured requests, wait for a successful server response and then render the saved state. Validation errors should explain why a request was rejected. Private API responses must not be copied into public statistics or exposed merely to make a page appear busy.
Automated checks cover selected authentication, privacy, messaging, scheduling, credit, newsletter, matching and settings behaviors. Passing tests is useful evidence, but not a guarantee of security, accessibility, performance or compatibility on every device. Desktop and mobile viewport checks are not the same as a full real-device test programme.
The published application uses D1, polling-based updates, browser media APIs, and a rule-based guide; R2 integration code is present but its live binding is not enabled. A larger public service would still need continued work on backups, monitoring, email delivery and recovery, abuse prevention, accessibility, moderation capacity, and video infrastructure. No formal certifications, paid subscriptions, or unconnected integrations should be presented as working services.
AI helped accelerate the build, but it also required checking and correction. The purpose of this page is to make the contribution and implementation understandable—not to hide assistance or overstate what has been built.
Created by a 13-year-old Indian high school student
With thanks to my mentors, teachers and the tools that helped me learn.