Skip to content

Add course landing pages with registration forms to the course management platform #92

@kavaivaleri

Description

@kavaivaleri

Course Landing Page - Product Specification

Overview

Add marketing-focused landing pages for each course at /<course_slug>/about, separate from the existing course workspace at /<course_slug>/. Both pages are publicly accessible with no forced redirects - keeping things simple and transparent.

Key Design Principles

Simple - No complex authentication/enrollment redirects
Transparent - Everyone can see course content
Clear CTAs - Obvious enrollment prompts for non-enrolled users
Flexible - Users can freely navigate between landing page and workspace

Goals

  1. Create public-facing landing pages for each course (/<course_slug>/about)
  2. Keep existing course workspace functionality (/<course_slug>/)
  3. Make both pages publicly accessible (no redirects)
  4. Provide rich marketing content for prospective students
  5. Make enrollment easy and prominent on landing pages
  6. Keep implementation simple and maintainable

Implementation details

Course state

Instead of "course_finished" create course_state with 3 states: REGISTRATION, ACTIVE, FINISHED
When the course is in the registration state, the click on the course should bring to the sign-up about page (with redirect)
When course is active, should be usual /course/ page
To see the usual course page when the course is in the registration state, users (superuser status) will be able to see the actual course page to check that things look correct

About page

It should contain markdown content for marketing purposes
at the end there's a register form with the following fields:

Email (if signed up, show their email and don't let them change it)

Name

Country

Role
What best describes you?
Data Engineer
Data Scientist
Data Analyst
ML Engineer
Software Engineer (Backend)
Software Engineer (Frontend, Test, etc)
Student (STEM)
Student (Non-STEM)
Other

Comment: Anything you would like to add?

Countries: (don't show the region, but have it in the model)

it should be a dropdown list with possibility to type to see narrowed down list of options

country,region
Algeria,Africa
Angola,Africa
Benin,Africa
Botswana,Africa
Burkina Faso,Africa
Burundi,Africa
Cabo Verde,Africa
Cameroon,Africa
Central African Republic,Africa
Chad,Africa
Comoros,Africa
Congo,Africa
Democratic Republic of the Congo,Africa
Cote d'Ivoire,Africa
Djibouti,Africa
Egypt,Africa
Equatorial Guinea,Africa
Eritrea,Africa
Eswatini,Africa
Ethiopia,Africa
Gabon,Africa
Gambia,Africa
Ghana,Africa
Guinea,Africa
Guinea-Bissau,Africa
Kenya,Africa
Lesotho,Africa
Liberia,Africa
Libya,Africa
Madagascar,Africa
Malawi,Africa
Mali,Africa
Mauritania,Africa
Mauritius,Africa
Morocco,Africa
Mozambique,Africa
Namibia,Africa
Niger,Africa
Nigeria,Africa
Rwanda,Africa
Sao Tome and Principe,Africa
Senegal,Africa
Seychelles,Africa
Sierra Leone,Africa
Somalia,Africa
South Africa,Africa
South Sudan,Africa
Sudan,Africa
Tanzania,Africa
Togo,Africa
Tunisia,Africa
Uganda,Africa
Zambia,Africa
Zimbabwe,Africa
Canada,North America
United States,North America
United States of America,North America
Mexico,North America
Bermuda,North America
Greenland,North America
Saint Pierre and Miquelon,North America
Belize,North America
Costa Rica,North America
El Salvador,North America
Guatemala,North America
Honduras,North America
Nicaragua,North America
Panama,North America
Cuba,North America
Dominican Republic,North America
Haiti,North America
Jamaica,North America
Trinidad and Tobago,North America
Barbados,North America
Bahamas,North America
Grenada,North America
Saint Lucia,North America
Saint Vincent and the Grenadines,North America
Dominica,North America
Antigua and Barbuda,North America
Saint Kitts and Nevis,North America
Puerto Rico,North America
Curacao,North America
Aruba,North America
Cayman Islands,North America
Argentina,South America
Bolivia,South America
Brazil,South America
Chile,South America
Colombia,South America
Ecuador,South America
Guyana,South America
Paraguay,South America
Peru,South America
Suriname,South America
Uruguay,South America
Venezuela,South America
French Guiana,South America
Falkland Islands,South America
Afghanistan,Asia
Armenia,Asia
Azerbaijan,Asia
Bahrain,Asia
Bangladesh,Asia
Bhutan,Asia
Brunei,Asia
Cambodia,Asia
China,Asia
Georgia,Asia
India,Asia
Indonesia,Asia
Iran,Asia
Iraq,Asia
Israel,Asia
Japan,Asia
Jordan,Asia
Kazakhstan,Asia
Kuwait,Asia
Kyrgyzstan,Asia
Laos,Asia
Lebanon,Asia
Malaysia,Asia
Maldives,Asia
Mongolia,Asia
Myanmar,Asia
Nepal,Asia
North Korea,Asia
Oman,Asia
Pakistan,Asia
Palestine,Asia
Philippines,Asia
Qatar,Asia
Saudi Arabia,Asia
Singapore,Asia
South Korea,Asia
Sri Lanka,Asia
Syria,Asia
Tajikistan,Asia
Thailand,Asia
Timor-Leste,Asia
Turkey,Asia
Turkmenistan,Asia
United Arab Emirates,Asia
Uzbekistan,Asia
Vietnam,Asia
Yemen,Asia
Albania,Europe
Andorra,Europe
Austria,Europe
Belarus,Europe
Belgium,Europe
Bosnia and Herzegovina,Europe
Bulgaria,Europe
Croatia,Europe
Cyprus,Europe
Czechia,Europe
Denmark,Europe
Estonia,Europe
Finland,Europe
France,Europe
Germany,Europe
Greece,Europe
Hungary,Europe
Iceland,Europe
Ireland,Europe
Italy,Europe
Kosovo,Europe
Latvia,Europe
Liechtenstein,Europe
Lithuania,Europe
Luxembourg,Europe
Malta,Europe
Moldova,Europe
Monaco,Europe
Montenegro,Europe
Netherlands,Europe
North Macedonia,Europe
Norway,Europe
Poland,Europe
Portugal,Europe
Romania,Europe
Russia,Europe
San Marino,Europe
Serbia,Europe
Slovakia,Europe
Slovenia,Europe
Spain,Europe
Sweden,Europe
Switzerland,Europe
Ukraine,Europe
United Kingdom,Europe
Vatican City,Europe
Australia,Oceania
New Zealand,Oceania
Fiji,Oceania
Papua New Guinea,Oceania
Solomon Islands,Oceania
Vanuatu,Oceania
Samoa,Oceania
Tonga,Oceania
Kiribati,Oceania
Tuvalu,Oceania
Nauru,Oceania
Micronesia,Oceania
Palau,Oceania
Marshall Islands,Oceania
New Caledonia,Oceania

when people sign up, we don't create enrollment
we also have mailchimp integration: when people register, they are added to our newsletter with a specific tag (specified in the course entity). the mainchimp token could be env variable

warn people that they will be subscribed to the DataTalks.Club newsletter when they sign up

it should happen in the background - after user signed up

code from another project

def add_update_contact(list_id, email):
    data = {
        "email_address": email,
        "status_if_new": "subscribed", 
    }

    mc_url_template = 'https://us19.api.mailchimp.com/3.0/lists/{list_id}/members/{subscriber}'
    
    subscriber = md5(email)
    mc_url = mc_url_template.format(list_id=list_id, subscriber=subscriber)
    
    mc_auth = ('anystring', MAILCHIMP_TOKEN)
    mc_headers = {'Content-Type': 'application/json'}
    
    response = requests.put(mc_url, auth=mc_auth, headers=mc_headers, json=data)
    print(f'{mc_url} {response.status_code}')
    print(f'add_update_contact({list_id}, {subscriber})')
    return response

Also, if there's a video overview of the course (youtube url), embed it

SEO Requirements

Meta Tags

Each landing page should have:

  • Custom title: {course.title} - DataTalks.Club
  • Meta description from course.meta_description or fallback to course.description
  • Open Graph tags for social sharing:
    • og:title
    • og:description
    • og:image (from hero_image_url)
    • og:type
  • Twitter Card tags:
    • twitter:card
    • twitter:title
    • twitter:description
    • twitter:image

Tests

Make sure this functionality if throughout tested with unit, integration tests. Also manually

Design

include pictures of the interface in the PR

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions