creo - Create Your World
creo
is a Static Site Generator (SSG) capable of publishing your new website home today. creo
is the next-generation of technology. When you put your trust in creo
, you're in good hands.
Features
creo
is a complete package program for creating websites from raw files. The following features are listed, and more will come as creo
evolves thanks to our expansive research and development team.
- Create skeleton template directory for publishing sites
- Convert Markdown files into HTML files using templates
- Copy all static assets and co-locate all files relative to documents
Build and Install
Creo uses a Makefile and can be built using GNU make
. Building requires the latest Racket version (8.0+ minimum) since it uses the Chez Scheme (CS) backend.
For Linux
make
sudo make install
For Windows
Since GNU Make is not widely present on Windows platforms, you can build an executable by instead running the following command.
raco exe --cs -v -o build/creo src/main.rkt
Installation is then simply putting the binary somewhere in your $PATH
on Windows.
For MacOS
Same as above, if no make
is present, use the same command line for Windows.
Other OSes
creo
supports any OS that Racket can be built on. If you want to build creo
on a platform not listed, go to the Racket homepage and attempt to build from source, then use that compiled program to build creo
.
Design
creo
is implemented in Racket, for the choice of it's incredible language flexibility, giving us the power to do more while doing less. creo
chooses features over performance.
Inspiration
The name of creo
is inspired by CREO from the game "The Surge (2017)" (steam).
Coding Guidelines
- Break up functions into multiple files for modularity.
- If a file provides a
struct
and interactions for creating thestruct
, it should be in the same file. - If functions exist to mutate the struct into different objects, those should be in their own files.
- Conversion functions that map
a
tob
should be denoted with a function namea->b
. - Use namespace in names for important functions, like
Config:write-default
to note that we are writing the default file forConfig
. - Data storage abstractions like
Queue
orTask
should be considered a "collection" and put in thecollections/
folder. - Main entrypoint functions are inside
functions/
. - The more complex a program gets, consider breaking it up into an appropriate folder.
- Build before commit. Test if the program compiles or not, and whether it's worth a commit.