-
Notifications
You must be signed in to change notification settings - Fork 33
Description
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
- Create public-facing landing pages for each course (
/<course_slug>/about) - Keep existing course workspace functionality (
/<course_slug>/) - Make both pages publicly accessible (no redirects)
- Provide rich marketing content for prospective students
- Make enrollment easy and prominent on landing pages
- 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_descriptionor fallback tocourse.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