Giter Site home page Giter Site logo

bryanlundberg / nexustimer Goto Github PK

View Code? Open in Web Editor NEW
32.0 2.0 25.0 17.8 MB

Nexus Timer is a powerful unopinionated, minimalist training tool for SpeedCubing.

Home Page: https://nexustimer.pro

License: GNU General Public License v3.0

JavaScript 4.70% CSS 0.26% TypeScript 95.04%
rubiks-cube rubiks-cube-scrambler nextjs scramble-display rubiks rubiks-cube-solver rubiks-cube-timer timer nexustimer first-pull-request

nexustimer's Issues

manual mode

Manual mode is an addition, allowing users the flexibility to run their sessions using external timers, such as a stackmat.

  1. Need an input component

  2. Logic saving times

Input Test Cases:

Entering "50" should convert to "0.50."
Entering "95" should convert to "0.95."
Entering "500" should convert to "5.00."
Entering "950" should convert to "9.50."
Entering "6138" should convert to "1:01.38."
Entering "5000" should convert to "50.00."
Entering "9500" should convert to "1:35.00."
Entering "135000" should convert to "1:35:00."
Entering "34292" should convert to "3:42.92."
Entering "69344" should convert to "7:33.44."

By implementing this change, we aim to ensure that users, including those with accessibility needs, can easily and accurately input times in the desired format.

Organizing component overload

Our project contains too much spaghetti code, which hinders the full potential of Next.js and server components because we use the "use client" tag too early in pages due to the use of useState and useEffect. We need to improve organization and reduce components to its smallest size. Here's how to do it:

  • Make a new issue related to the component you want to tidy up. Explain what needs fixing.
  • When you are ready, create a pull request (PR) to implement the changes.

You can create a folder if you think can improve organization of the component.

If you are concerned about prop drilling, consider using Zustand to create a global state. It can help simplify data sharing across components. #72

Incorrect behavior with spacebar

Currently, there is an issue with the timer. When a user stop the time and continues pressing the spacebar, the timer sets ready unintentionally for the next solve.

The expected behavior should be release the spacebar before proceeding to the next solve.

Multi theme support

Allows users to customize the look and feel of their digital experience by selecting from a variety of pre-designed themes or creating their own unique themes, enhancing personalization and user engagement.

Add error handler using "import"

Adding error handling for situations when the input file contains incorrect data. For now, a simple user alert should be sufficient and return the function before replace the localStorage.

modal before delete cube

Create a confirmation modal that informs users of the number of solves to be deleted when they confirm the cube deletion. This action could potentially impact their personal best times.

Timer starts unintentionally in mobile version

Issue: The timer starts when you tap the buttons, contrary to the expected behavior.

To recreate the problem:

  • Open the mobile version in developer tools (allows you use touch event).

In timer settings:

  • Turn on "Show quick action buttons."
  • Turn off "Hold to start."
28d39f442888f7ac1216abc8f0f79103.mp4

A potential solution would be to assign an ID or reference to the quick action buttons component container. Then, in the timer logic, ensure that you are not tapping that element to avoid unintended timer activation.

Pending SQ1 & Megaminx scrambles

Need an algorithms to generate SQ-1 and Megaminx scrambles

Expected output:

SQ1 -> (-5,0)/ (0,3)/ (3,0)/ (2,-4)/ (-2,-5)/ (5,-1)/ (-2,0)/ (0,-3)/ (0,-2)/ (6,0)/ (0,-1)/ (0,-5)/ (2,-2)/

Megaminx ->
R++ D-- R-- D++ R-- D++ R++ D-- R-- D-- U'
R++ D-- R-- D-- R++ D-- R-- D-- R++ D++ U
R++ D-- R-- D-- R-- D-- R++ D-- R-- D++ U
R++ D++ R++ D++ R++ D++ R-- D-- R++ D-- U'
R-- D++ R++ D-- R++ D-- R++ D++ R++ D-- U'
R++ D++ R-- D-- R++ D-- R-- D-- R++ D-- U'
R-- D++ R++ D++ R++ D++ R++ D-- R-- D++ U

Close Settings by Clicking Anywhere Outside

On large screens, the settings can currently only be toggled using the dedicated button. How about enhancing user experience by allowing closure of the settings when clicking anywhere outside the settings interface

Alert user to provide a cube name for saving

When a user attempts to edit a cube in the modal, and the cube name field is left empty, there should be a user-friendly alert to prompt them to provide a name before proceeding.

image

Creating a cube has one:

image

Design a new user interface for the "deletion confirmation modal" for cubes.

This proposal is open to adjustments and improvements in various aspects such as sizes, colors, transitions, hover effects, section variations, and overall design to achieve the best possible results.

  • It's essential to ensure responsiveness.
  • If possible, consider isolating the "modal" into a new component.

current:
279187173-d565766d-a806-4a55-bca9-5f80855c6804

new:
279207076-cf8c1a19-7153-4f1d-af6e-fa636f0ed3b9

Metrics become 0

If you search a cube in cubes section with 0 coincidences and the go to metrics page, state of cube is empty.

Nextjs v13.5.5 error

Since dependent bot updated from 13.4.19 to 13.5.5 throwing an error at dev mode and at build

 ✓ Compiled /stats/page in 2.9s (1957 modules)
 ⨯ TypeError: responseHeaders.getSetCookie is not a function
    at new ResponseCookies (webpack-internal:///(app-metadata-route)/./node_modules/next/dist/compiled/@edge-runtime/cookies/index.js:213:47)
    at new NextResponse (webpack-internal:///(app-metadata-route)/./node_modules/next/dist/server/web/spec-extension/response.js:40:22)
    at GET (webpack-internal:///(app-metadata-route)/./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Ffavicon.ico%2Froute&isDynamic=0!./src/app/favicon.ico?__next_metadata_route__:15:10)
    at C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:62505
    at C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\lib\trace\tracer.js:121:36
    at NoopContextManager.with (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\@opentelemetry\api\index.js:1:7057)
    at ContextAPI.with (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\@opentelemetry\api\index.js:1:516)
    at NoopTracer.startActiveSpan (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\@opentelemetry\api\index.js:1:18086)
    at ProxyTracer.startActiveSpan (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\@opentelemetry\api\index.js:1:18847)
    at C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\lib\trace\tracer.js:110:107
    at NoopContextManager.with (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\@opentelemetry\api\index.js:1:7057)
    at ContextAPI.with (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\@opentelemetry\api\index.js:1:516)
    at NextTracerImpl.trace (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\lib\trace\tracer.js:110:32)
    at C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:56147
    at AsyncLocalStorage.run (node:async_hooks:330:14)
    at Object.wrap (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:37057)
    at C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:53934
    at AsyncLocalStorage.run (node:async_hooks:330:14)
    at Object.wrap (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:36635)
    at C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:53896
    at AsyncLocalStorage.run (node:async_hooks:330:14)
    at eD.execute (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:53870)
    at eD.handle (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:63748)
    at doRender (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\base-server.js:1217:56)
    at cacheEntry.responseCache.get.incrementalCache.incrementalCache (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\base-server.js:1446:34)      
    at ResponseCache.get (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\response-cache\index.js:53:26)
    at DevServer.renderToResponseWithComponentsImpl (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\base-server.js:1361:53)
    at C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\base-server.js:903:121
    at NextTracerImpl.trace (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\lib\trace\tracer.js:94:20)
    at DevServer.renderToResponseWithComponents (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\base-server.js:903:41)
    at DevServer.renderPageComponent (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\base-server.js:1600:35)
    at async DevServer.renderToResponseImpl (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\base-server.js:1638:32)
    at async DevServer.pipeImpl (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\base-server.js:826:25)
    at async DevServer.handleCatchallRenderRequest (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\next-server.js:623:13)
    at async DevServer.handleRequestImpl (C:\Users\bryan\Documents\workspace\NexusTimer\node_modules\next\dist\server\base-server.js:728:17)

Solution lower down nextjs to v13.5.1, there is not happening

Hide navbar while is solving

We need to hide the navigation bar during the solving process, as it has been broken since the recent project restructuring.

ea4ee2c2647ff34bb04a6c189f754ea5.mp4

Improve times readability

Need a function to convert time and improve user readability for big cubes example 93.03s to 1:33.03

Add Data Validation using the 'Import' feature

File: importDataFromFile.ts has everything needed to handle error using import feature.

Now, it is necessary to finish it, there is a function inside isValidCubesData(), which should return 'true' or 'false' based on whether all the data in the imported .txt file complies with our designated data structure.

image

Create a toast component for alerts

We are looking to design and create a toast component that integrates with our current style and enhances it.

Mobile position:

image

Tablet or desktop computer with reasonable width dimensions:

image

Here are the revised points:

  • The toast should automatically disappear after 5 seconds.
  • There should be an animation indicating the remaining time.
  • Note that implementing it in the UI is not required at this stage, as triggers have not been developed yet.
  • Need a close button X
  • This toast component will serve various purposes, including alerting users about the best time, best average, unlocking new titles, cube deletions, and solve deletions, etc (Think about it).

Best design wins, we have time until create the triggers.

archive unique solves

Right now its not possible archive single solves, need an extra option. To move the solve from session-solves to all-time-solves.

image

Add cube inspection feature

Enhance the timer with an optional 15-second cube inspection countdown, along with a +2 penalty for exceeding the inspection time, offering users a more realistic and competitive practice environment.

Inaccurate "best time" rendering

The "Best" statistic is not accurately reflecting the lowest time; it should consistently display the lowest recorded time.

8ea88f3e3a6a60e8179a233b1da21fcd.mp4

Pending megaminx cube

The Megaminx option is not in the current category list and is an official WCA category

Synchronize the selected cube after deleting it

If you've chosen the "X" cube and decide to delete it, it remains selected on the Timer page. It should be reset to a null state until you select a new cube just in case you deleted the selected cube.

Improve navbar active icon

Currently icons are type outline. I would like get a better effect switching to type solid when we are in the current page.

Heroicons

I facilitate the searching of the icons, their names are:

  • clock
  • square-3
  • chart-bar
  • squares-plus

Time Display Formatting

We got a new function for formatting time in a nice way. As a result, we need update all existing components to utilize this function before rendering.

  • Timer (desviation, mean, best, ao5 - ao100)
  • Solves (session / all, solve modal)
  • Metrics (Last activity, all category statistics...)

formatTime.ts

Not editable modal options

The Modal for editing a cube:

  • "Category" should not be editable, only the name.

Changing the category from, for example, a 2x2 cube to a 7x7 cube can lead to skewed statistics. It's important to note that solves on a 2x2 cube are typically faster than those on a 7x7 cube. Therefore, altering the category may result in inaccurate best times, averages, and other statistical data.

This is not a bug; it's a deliberate design choice to ensure the integrity of your solving data.

Feature Import / Export user data

We need to enhance the user experience by adding a feature in the menu settings that facilitates the export and import of user data. This feature will be especially valuable until we implement backend solutions for data management.

Improve current language translations

This issue is dedicated to improving language translations for our project. We need to either add new translations for missing languages or fix existing translations that may have errors or inconsistencies.

Its important for me reach a closer meaning but related to the thematic if that involve the use of other words

Add shortcut to cube selection

In case you click cube details redirect to timer page and also set the selected cube with the previously clicked, should not be trigger with the edit column.

image

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.