Skip to content

My final project submission for Harvard's CS50x 2024 course

Notifications You must be signed in to change notification settings

jrgo7/start-page-maker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simple Start Page Maker

Description:

Simple Start Page Maker is a program written in Python that lets the user generate HTML representing a landing or bookmarks page through a Tkinter-based GUI. Start page configurations can also be saved to or loaded from JSON.

To use the application, first open main.py. Input the names and URLs of the websites you wish to "bookmark". Optionally, you may also set a custom text color and a background color by clicking on any of the two buttons at the bottom and choosing a color from the color picker that appears. Finally, click on Export to HTML to indeed generate valid HTML that can then be used with any web browser. If wanting to save a configuration for later, you may Save to JSON and Load to JSON through the menu buttons of the same name.

Here is the purpose of the various files included in this submission:

  1. main.py: This is the Python file script that contains the logic of the program itself. Run this file to start the program.
  2. constants.py: main.py relies on (imports) this file for certain hard-coded constants, such as the template HTML and CSS text files via which the user's configuration is to be applied.
  3. output.html: Sample output HTML file. Something that looks like this should be the output of the Export to HTML menu button.
  4. sample.json: Sample output (and input) JSON file. When a user clicks on Save to JSON, something like this must be generated on the disk. When a user attempts to Load from JSON, however, something like this must be selected as the input file.
  5. README.md: This very document being read right now. It documents the submission, the various files included therein, as well as some commentary on the rationale behind this program and some design submissions

The project was born out of a desire to add a little bit more personalization to web browsers. To begin with, we could easily just add another bookmark in the default start page and be done with it, but it would be cooler if we could have our own custom-made start page. Many tutorials exist online for this, some of which I have followed in the past to create my own beautiful start pages. At the same time, however, some people may want in on the action, yet may not have enough time to manually code everything from scratch. Hence, the idea to automate at least some part of the process came into being as Simple Start Page Maker. The program is at least niche enough that start pages generated through it would look "different", at least!

The app was written in the Python programming language and makes extensive use of the Tkinter module. Tkinter is a GUI toolchain framework that simplifies GUI development by defining various "widgets" (e.g., Labels, Entries, Buttons, Frames, etc.) that can be instantiated, configured, and combined to create simple but functional GUIs. Rather than hosting a web application through Flask similar to a previous problem set, I opted to use Tkinter instead as I wanted to make an app that looked more native in nature (and also so I could learn another way of making an app with a user interface).

Furthermore, although exporting to HTML is the primary function of this program, configurations can also be saved and loaded to and from JSON, or JavaScript Object Notation. The rationale behind this is that users may want to adjust start pages generated by this program later down the line. I used JSON specifically because it is a well-recognized file format that can simplify storing and retrieving the data used in this program, being easily translated to and from a Python dict through the json module.

This project can be expanded to customize other aspects of the page, such as the title and the big "Start" header on top of the links. It would be easy, too: all anyone would need to do is add two more Entries (perhaps in a LabelFrame) and add the needed functionality. Moreover, instead of a background color, it is also possible to add another button to set a background picture instead.

About

My final project submission for Harvard's CS50x 2024 course

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published