Files
classroomio/packages/course-app/bin/create-template.ts
T
Rotimi Bestandemmanuel 26700dccd0 feat: introducing @classroomio/course-app (#490)
* feat: v1 templates

* update nvm

* working on the displaying the course content

* working on the displaying the course content

* displayed the content

* finished with the logic for rendering the content for all the courses and lessons

* post hog template UI is good to go

* classic and minimalistic template UI is good to go

* some refactoring

* some refactoring

* layout adjustments

* update tsconfig

* trying to get the filter to work well

* this is working now

* cleanup

* cleanup

* UI updates

* course page UI for posthog

* navbar and sidebar for course page in all templates complete

* all templates course page showing lesson content from md file with mdsvex
configured

* wokring on sections

* posthog lesson content done

* all templates fetches the lesson content from the section

* all templates properly typed

* scaffolding the new template

* finished the webflow-saas

* done with the webflow saas UI

* new calcom template

* new calcom template

* masonry layout for testitomonail section layout done

* calcom UI done

* UI all done

* cleanup

* trying to fix dark mode for the course page and home page

* done with this

* done with this

* working on tests

* migrated minimalistic template to svelte 5

* updated the syntax to svelte 5 for webflow

* migrated classic to svelte 5

* migrated posthog to svelte 5

* used svelte 5 syntax in calcom

* cli tool woks locally

* rename to course-sites

* use pnpm in root

* calcom refactoring

* remove unused files

* chore: biggest refactoring in my life

* add basic readme

* refactoring on course page

* restructure how courses are ordered

* proper state propagation

* add cf adapter

* fix pnpm i issue

* fix folder icon size

* use 18.17 version

* update npmrc

* add engine to packagejson

* pnpm install

* add engine to cio-com

* make it 18.x

* remove sequence

* move mdsvex to dependencies

* update lock

* mdsvex please work

* replace fs with import from vite

* add lock

* styling improvements

* fix styling

* sidebar style improvements

* fix: mobile concerns

* fix spacing of course header on desktop

* update header

* top nav fix

* feat: make cal template

* setup another template

* classic basic UI

* fixed the /courses fetching wrong page content

* fix breaking template cause of logo

* adding some updates

* improve styles theming

* finished updates from reviews

* updated the custom styling css

* clean up posthog template

* cli tool done, needs some cleaning though

* moved components to home

* improved the UI of the minimal template

* Add CLI tool and course app site

* prettier lint

* improve CLI

* ignore sveltekit folder

* publish course app

* fix tailwing theme + improve README

* finish up course-app site

* update README.md

---------

Co-authored-by: emmanuel <[email protected]>
2024-12-14 03:40:47 +01:00

85 lines
2.2 KiB
JavaScript

#!/usr/bin/env node
import { program } from 'commander';
import chalk from 'chalk';
import inquirer from 'inquirer';
import ora from 'ora';
import path from 'path';
import TEMPLATES from '../templates.json';
import { scaffoldTemplate } from '../lib/scaffoldTemplate';
const spinner = ora();
const templates = TEMPLATES.map((template) => template.name);
program.version('0.0.1').description('Courseapp CLI');
program
.argument('[projectName]', 'name of the project')
.option('-t, --template <template>', 'name of the template')
.option('-c, --courses', 'use demo courses')
.action(async (projectName, option) => {
let { template, courses } = option;
if (!projectName) {
const answer = await inquirer.prompt([
{
type: 'input',
name: 'projectName',
message: 'Enter the project name',
default: '.',
when: !projectName
}
]);
projectName = answer.projectName;
}
const projectPath =
projectName === '.' ? process.cwd() : path.resolve(process.cwd(), projectName);
if (!template) {
const answer = await inquirer.prompt([
{
type: 'list',
name: 'template',
message: 'Select a template',
choices: templates,
default: templates[0]
}
]);
template = answer.template;
}
if (courses === undefined) {
const answer = await inquirer.prompt([
{
type: 'confirm',
name: 'course',
message: 'Would you like to use our demo courses?',
default: true
}
]);
courses = answer.course;
}
spinner.start('Scaffolding project....');
try {
await scaffoldTemplate({ template, courses, projectPath, projectName });
spinner.succeed(`\n\n${chalk.green('Done! Your project is ready.')}\n\n`);
console.log(
`To get started:\n\n${chalk.blue(`cd ${projectName}`)}\n${chalk.blue(
'pnpm i'
)}\n${chalk.blue('pnpm run dev')}`
);
console.log('\n\n', chalk.blue('Happy hacking ;)'));
} catch (error) {
spinner.fail(chalk.red(`Failed to scaffold the project. ${error}`));
process.exit(1);
}
});
program.parse(process.argv);