ctc-app : A web application for Crack The Code like contests

Desmond

Destroy Erase Improve
Staff member
Admin
Sometime ago, I had expressed an interest in building a more modern web application for Crack The Code. To that end, I have started a project on Github called ctc-app. It's expected to be generic and can be used to host any contest that follows the CTC formula.

For now, I have only implemented user login and logout and two user roles (ROOT and USER). So you can test these out for now.

Future features to add:
  • Social media login via Facebook, Twitter.
  • Admin page to manage users or create new admins.
  • Multiple types of challenges and progress tracker.
  • Leaderboards.
  • Mobile friendly design.
  • Any more that I have not thought about yet.
This thread serves as a base to discuss the web app, suggest new features, report bugs, etc.

This project is written in Kotlin using Spring Framework and the UI uses Thymeleaf templates. However, if anyone of you have any experience in UI frameworks such as React or Angular, you can volunteer to develop a new UI.

So, let's see if something comes out of this or whether this project gathers cobwebs.
 
Last edited:

khalil1210

In the zone
If anyone of you have any experience in UI frameworks such as React or Angular, you can volunteer to develop a new UI.
Yo, I went through the old crack the code website. Can't understand what needs to build here. If it is only login, admin pages and leaderboard, I can help. I have experience of 5 years of web development backend (java) and front end (jQuery, html, css).

Haven't worked on React or Angular, but will try to implement in it. Do you have any page designs or rough idea what is expected here.
 
OP
Desmond

Desmond

Destroy Erase Improve
Staff member
Admin
Run the application and see what is done so far. Login uses Spring Security and the UI is made up of Thymeleaf templates. For now the only functionality is that different links will be displayed in the nav bar based on the user's role.
 

Vyom

The Power of x480
Staff member
Admin
I really hope I had enough knowledge to contribute. But I like the idea.
Keep it up.
 
OP
Desmond

Desmond

Destroy Erase Improve
Staff member
Admin
It's a better website for crack the code. I used to think the existing crack the code method is a bit clunky and wanted to build a better web app for it.
 
OP
Desmond

Desmond

Destroy Erase Improve
Staff member
Admin
After some dormancy, I have been thinking of restarting this project. However, since I am pretty busy these days, I would like some help, especially from people who have participated in previous crack the code contests.

I think it would be best to start from scratch and start where any project starts: Requirements gathering. Since I have never participated in any CTC, I think it would be best if anyone who already participated in the contest share your experience of participating in CTC here. Some key points I am looking for are:

  • The format (type, style or scope) of the puzzles.
  • How is the experience of existing CTC
  • What you think should be improved (A good pointer of this would be statements that start with "I wish...")

Based on this feedback, I will prepare a design document that you guys can review.

Also, if any of you are interested in a career in software development, this project might give you some insights into how professional software development is done in the industry, including various stages of development. Experienced developers can also participate in this project and I will credit them as contributors on GitHub. Future development will be planned once the design document is prepared.
 
OP
Desmond

Desmond

Destroy Erase Improve
Staff member
Admin
Ok, so after some planning I have identified the following entities that will make up the foundation of this application:

1. Event: An event will be an iteration of the CTC contest. For example, when a new CTC contest is announced, it will be called an event.
2. Leg: Each event will have multiple legs.
3. Challenge: Each leg will have multiple challenges.
4. User: A user is anyone who is registered in the system.
5. Role: Each user will have two roles: Admin and player.

These entities will have the following properties:

Event:
Column nameTypeDescription
idUUIDThe id of the event.
nameStringName of the event. For example "Crack The Code XX"

Leg:
Column nameTypeDescription
idIntegerThe id of the leg in a particular event. This is unique along with the event id.
event_idUUIDThe id of the event that this leg belongs to.
nameStringThe name of the leg. For example: "Leg 1" but can also have a fancy name.

Challenge:
Column nameTypeDescription
idUUIDThe id of the challenge.
display_nameStringThe name of the challenge that is to be displayed to the user. Basically the title of the challenge.
typeStringType of the challenge. Will possibly be an enum.
event_idUUIDThe event that this challenge belongs to.
leg_idIntegerThe leg that this challenge belongs to.

User:
Column nameTypeDescription
idUUIDThe id of the user.
emailStringThe email of the user.
enabledBooleanFlag the indicates whether this user is enabled or disabled.
usernameStringThe username of the user.
passwordStringThe password of the user (stored as hash).

Role:
Column nameTypeDescription
idUUIDThe id of the role.
nameStringThe name of the role. Will be enum: ADMIN and PLAYER.

Transient tables have been omitted for brevity. Also, I am yet to write the remaining relationships, I will update this post as I setup the relationship between users and the challenges, legs and events. For now the ER diagram for this model looks like this:

1670745300582.png


If anyone has any feedback so far, please post here.
 

Vyom

The Power of x480
Staff member
Admin
I think you need a few timestamp fields to record when a user reaches certain legs or completes certain challenge?
 
OP
Desmond

Desmond

Destroy Erase Improve
Staff member
Admin
Yeah, I will update the tables for that. For now I am just trying to get a simple login/logout system working.

Thanks for pointing that out.
 
Last edited:

aaruni

The Linux Guy
  • The format (type, style or scope) of the puzzles.

I think the basic "Question -> Answer" format should be retained. i.e., every challenge prompts the user towards some kind of an answer that the user can input into a regular text box.

This way, even though the challenges get harder and more cryptic, the consistent way of entering answers means that things never get too big or out of scope for certain users, and even the application (good luck keeping track of the answer to a challenge being to visit a certain URL or whatever).

To get from one challenge to the next challenge should always involve coming back to the application and entering an answer into a text box, IMO.
 
OP
Desmond

Desmond

Destroy Erase Improve
Staff member
Admin
Yeah, the plan is for maintaining a list of questions and unlocking the next question after answering the current one. So no need to track URLs since progress can be shown on a dashboard and players can pick up from there.

Development is kinda dormant now because I forgot to push the code to git and I am out of station lol.
 
Top Bottom