Code Monkey home page Code Monkey logo

downforacross.com's Introduction

built with Codeium

downforacross

Downforacross is an online website for sharing crosswords and playing collaboratively with friends in real time.

It is hosted at https://downforacross.com/.

Contributing

If you notice a bug or have a feature request, feel free to open an issue.

Getting Started

  1. Install nvm and yarn

  2. Clone repo and cd to repo root.

    git clone https://github.com/downforacross/downforacross.com.git cd downforacross.com

  3. Use node v18 nvm install nvm use nvm alias default 18 (optional)

  4. Install Dependencies yarn

  5. Run frontend server yarn start

Contributing

Down for a Cross is open to contributions from developers of any level or experience. See the Getting Started section for instructions on setting up.

Join the discord for discussion.

Tips

Developing for mobile web:

Other resources

Star History

Star History Chart

downforacross.com's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

downforacross.com's Issues

Client regularly losing sync

Hi! Thanks for your work on this project.

In the past 1-2 days, the client has started to lose sync very frequently (every ~30 seconds). When it happens, the client stops receiving updates. The "Ahead" count at the bottom continues to increment for every local action.

It's fixed by refreshing the client.

Better support for emojis

Let the users put emojis in cells as reactions.
Mobile interface is very clear: if they type an emoji, then append it to the emoji list
Keep emojis around for ~5 minutes, take the last 1 from each user, last 3 globally, to avoid clutter.

Launch this behind a flag?

mobile

Cluelist

  • new york times-like view of clue list in a scrollview (hiding the actual grid)

MobileGridControlsV2

Because the onscreen keyboard (in both android and iOS) comes with nasty things like autocomplete, useless headers, and unnecessary height on each key, we should make our own keyboard in react!

App-ness

These are a good set of guidelines that should be followed: https://web.archive.org/web/20151103001838/http://www.luster.io/blog/9-29-14-mobile-web-checklist.html

Important ones:

  • position: fixed / no overscrolling
  • fixed layout (toolbar, grid, )
  • no contextmenu / long tap / selection
  • disable zooming on the page, but allow grid to be zoomed in?
  • native app-like multi-modal view w/ transitions (e.g. when navigating between home page, game, and within game, grid, chat, cluelist)

Pencil suggestions

  • Clicking the pencil shouldn't take focus away from whichever square you were on
  • There should be a keyboard shortcut for pencil mode

emoji search bar doesn't work

image

The yellow bar that pops up is non-responsive (doesn't disappear after enter or esc), only goes away after a space or after the 'emoji' is deleted.

use colors in chat

  • color the username with color of sender (to match with in-game cursor)

Feature request: replay list by puzzle

I'd like a page, downforacross.com/replays/puzzleid, where I can see a list of plays of my puzzle that have happened. When I click a link from that list, it goes to a replay page (group, or solo) for that solve.

In order for this to happen, replay pages for solo solves would have to exist.

persist usernames per-game

  • within the same game, e.g. when refreshing, keep the same username [only if user has chatted with that username at least once?]
    • can use localstorage for this
    • alternatively, to make this persist across browsers, use /user/history/:gid [should be easy to throw lastUsedUsername as a param to User.joinGame, and maybe make something like User.listUserHistory that takes a gid as a param]
  • retain the old functionality of generating a new username for each game, because i think people like being different animals.

instructions for composition

the keyboard shortcuts are a bit non-standard.

Grid:

  • . flip black/white
  • Enter: Switch focus to Cluetext
  • Esc: Switch focus to Chat

Chat:

  • Enter [when there is no text] / Esc: switch focus to grid

ClueText:

  • Enter: Switch focus to Grid
  • Esc: Switch focus to Grid

We should have this information available in the composition page (perhaps an icon that expands into a modal).

fix broken stickers

apparently some of the messenger.com links expired rip. should just host in public/static

composition hints algorithm rewrite

the Hints component is out of date and uses a very small, unscored wordlist. to change this:

  • support user-uploading scored wordlists (cache these client-side but not in db b.c. copyright)
  • add a default (can be very shitty, for now) scored wordlist (e.g., we can assign random or uniform scores to all the words in the current wordlist)
  • rewrite the algorithm for ranking partially filled grids to use scored entries
  • add an algorithm to auto-fill-grid
    • should be aware of the no-repeated-words rule

GUI:

  • support double-clicking suggested entries to fill (in pencil)
  • make auto-fill-grid be in pencil?
  • clear all pencil / commit all pencil buttons [do other tools have this?]
  • highlight in red all problem entries, i.e. those that are incomplete and have no suitable matches/are too long (crossfire has this, i think)

Allow searching by disjoint substrings

For example, if I want to find NYT Crosswords from April 2020, my intuition is to type NY Times April 2020 into the search bar. This doesn't work because downforacross is searching for that entire string in each title, and not finding it because it doesn't exist within a string like NY Times, Monday, April 27, 2020. But it's a very common technique to split each token in the search term, and return an result that contains NY, Times, April, and 2020. I believe this would be more powerful and intuitive.

better replay player

Currently, this is what it looks like:
image

Some nice to haves:

  • cut out paused-time (e.g. https://downforacross.com/beta/replay/12712 has a cursor-move a few hours after the game is over)
  • play/pause button w/ speed control
  • progress bar. i guess we could have a "fine-scrubbing" bar like the current one (zoomed-in), and a "coarse-scrubbing" bar that corresponds to the traditional media player thing (zoomed-out).
  • better mouse controls, e.g. hover-preview (like youtube)?

Visibility into members in room

It would be cool to see a list of people currently in the room and the ability to hover over the colored cursors and see who it is

Pause timer when navigating away from page

Ideally when navigating away from the tab, but if you close out of the puzzle window right now, the timer just runs forever and will still be running when returning to the url. Would be nice to be able to take a break and reflect actual time spent on the puzzle.

Dark Mode

I'd love to have a dark mode option.

replays page needs optimization

Currently, https://downforacross.com/replays loads all games in their entirety. each downloaded game object is ~20kB (but i think beta games will be bigger).

Only the metadata of the game is required, i.e. no grid/cursor tracking needs to be part of the query.

  • clock events for beta games will need to be explicitly queried from the events list, to reconstruct the play-time
  • chat events too^

Puzzle does not resolve

Two people working on this puzzle
Used check function a few times
All squares are blue, timer is still running and highlight is still blue

Sometimes when multiple participants type an answer the cursor position shifts and skips around, though I've observed this when I'm the only person typing (on a shared game)

https://downforacross.com/game/3880 - this is the only time we've seen this

chat username replacement feature is jarring

sometimes, people just want to delete the existing name & write their own.

possible fixes:

  • replace the username with randomly generated one only if the username-input loses focus. could be good to do this at the same time as #36
  • remove the re-generate feature entirely

compose page needs a redesign

downforacross.com/compose looks very plain.

ideas for the main compositions list (the fields available will depend on #27)

  • last updated column
  • collaborators?
  • sort compositions by last updated
  • published status + link to replays if published
    • incl. published at, version number, private or not

the rest of the page

Delete gets stuck on blue/correct characters

Would be great if delete was able to skip over correct characters in an incorrect word.

Currently, if you try to backspace through an answer that has a mixture of red and blue characters, it gets stuck on correct characters (you can backspace but nothing happens and it doesn't move on).

It's great that I can't delete blue characters, but if there are additional red characters in the word it'd be nice to be able to hop over the correct square and finish deleting.

E.g.

34898399-c4ed5c36-f7a7-11e7-8f83-fc5187d67825

One solution to this is a "clear all incorrect" function, but I sometimes like to leave red squares as a cue to distracted collaborators :)

replays page needs a redesign

make replays (https://downforacross.com/replays) look prettier (show puzzle title, etc).
Note: puzzle-specific replays (/replays/pid) are only available to logged-in users, maybe we should show some sort of error message to non-logged in users that try to access it.

Checklist

  • prettier table layout (thanks @daubaris!)
  • show puzzle title in /replays (1c5ac4b)
  • fix "start time / duration" for v1 games won't do

editor EditableSpan improvements

currently there's some weird behavior that can cause the text to not be saved.

quick fix: add a key prop, and use it to check if the content-editable div's text needs to be overwritten (i.e., it should happen when switching to a different clue, but not when switching from editing to not-editing).
long fix: make it support google-docs like collaboration (the above fix will make weird things happen, like two simultaneous clue-editors overwriting each others' work). this is probably not necessary functionality but it would be cool

Update: this is also really broken on firefox (cursor [aka selection] resets to position 0 whenever the element's textContent is set, because... the selection api is different on ff?)

editor grid & clue: show cursors

show cursors of collaborators, like in games.
this will be trickier, because it matters (moreso) what direction the cursors are associated with.
it also may be nice to know, e.g., if your collaborator is editing a clue / the position within the clue.

Checklist

External embed capability

something like <iframe src="www.downforacross.com/embed/:pid" .../>, should look like this, with a border around it.

image

image

image

  • no need to support collaboration / chat
  • should store state (can be in localStorage)
  • possible design: behave like /play/:pid, i.e. use the user's list of games with of the current pid, and create one if none exists. Ideally, should defer creation of game until the user actually starts interacting with the puzzle, so that we don't create a new game every time anyone visits the page?

Can't answer rebuses

I'm noticing that there doesn't seem to be a way to answer with more than 1 letter in a slot for Rebus answers.

Am I missing something? Or is this an area that needs addressing?

I love this project! ๐Ÿ˜„

composition publishing to puzzle list

for unpublished compositions:

  • a "Publish" button that generates a pid for the composition and stores it
    • should write to puzzle/:pid
    • should write to puzzlelist/:pid
    • should write to composition/cid/published (spec tbd)

for published compositions:

  • an "Update" button that updates (in-place) the puzzle at the associated pid. (this will also update all ongoing beta games with, e.g., new clues)
  • a button to "toggle private"
  • a link to the replays/pid
  • a (copy-able) link to /beta/play

@akshatb42 has WIP of this.

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.