A daily sliding-tile puzzle game powered by Reddit’s hottest content.
Unscramble the internet's favorite image of the day and beat the clock.
MemeJak is a daily sliding-tile puzzle game built on the Reddit Devvit Platform.
Every 24 hours, the game automatically fetches the top "Hot" post from a chosen subreddit (e.g., r/memes or r/pics). The image is sliced into a grid (3x3 - easy, 4x4 - medium, or 5x5 - hard) and shuffled.
Players race against time to solve the puzzle using classic sliding-tile mechanics.
- Uses Reddit API to fetch the daily "Hot" post at 00:00 UTC
- No manual curation required
- Fully automated daily refresh
- Every player receives the same shuffle configuration
- Ensures fairness and shared experience
- Daily state resets every 24 hours
- Casual (3x3) – Quick, lightweight challenge
- Puzzler (4x4) – Standard sliding puzzle experience
- Expert (5x5) – High-difficulty, high-detail challenge
- Classic 15-puzzle sliding mechanics
- Click a tile adjacent to the empty space to move it
- Only valid adjacent swaps are allowed
- Puzzle completes when all tiles return to original order
- Time Elapsed
- Move Counter
- Platform: Devvit (Reddit Developer Platform)
- Frontend: Devvit UI (Blocks, Stack, Image)
- Data Storage: Reddit Redis Plugin (Daily State)
- Scheduler: Devvit Scheduler
Runs once per day at 00:00 UTC.
Devvit.configure({
redditAPI: true,
});
Devvit.addMenuItem({
location: 'subreddit',
label: 'Show hot meme image',
onPress: async (_event, context) => {
// 1. Get hot posts from a subreddit, e.g. "memes"
const listing = context.reddit.getHotPosts({
subredditName: 'memes',
limit: 1,
pageSize: 1,
}); // returns Listing<Post> [[getHotPosts](https://developers.reddit.com/docs/api/redditapi/RedditAPIClient/classes/RedditAPIClient#gethotposts)]
const [post] = await listing.all();
if (!post) {
await context.ui.showToast('No hot posts found');
return;
}
// 2. Get the thumbnail image URL
const thumb = post.thumbnail; // { url, width, height } or undefined [[Post.thumbnail](https://developers.reddit.com/docs/api/redditapi/models/classes/Post#get-signature-35)]
if (!thumb?.url) {
await context.ui.showToast('Post has no thumbnail image');
return;
}
// 3. Use the image URL (here we just show it in a toast)
await context.ui.showToast(`Image URL: ${thumb.url}`);
},
});- Fetch Hot post
- Extract image URL
- Store image URL in Redis
- Store post ID in Redis
- Generate and store daily shuffle seed
daily_image_urlshuffle_seed
-
Uses 9 / 16 / 25 separate
<Image>blocks -
Each block loads the same image URL
-
Cropping handled using:
imageWidthimageHeightresizeMode
const grid = [0, 1, 2, 3, 4, 5, 6, 7, 8];- Shuffle using deterministic seed
- Swap indices on valid moves
- Detect completion when grid matches original order
- Fisher-Yates shuffle
- Seeded random generator for deterministic daily puzzle
- Ensure puzzle remains solvable
A tile can move only if:
- It is adjacent (up, down, left, right) to the empty tile
- The move maintains valid board state
const isSolved = grid.every((value, index) => value === index);- Configure
Devvit.configurewith Reddit API - Implement
fetchHotPostlogic - Build 3x3 grid UI using Devvit Blocks
- Implement shuffle logic
- Implement move validation logic
- Milestone: Playable puzzle with hardcoded image
- Implement
Devvit.addSchedulerJob - Store daily image in Redis
- Store daily shuffle seed
- Ensure 24-hour shared puzzle state
- Add timer
- Add move counter
- Add difficulty selector (3x3 / 4x4 / 5x5)
- Add reset button
Primary Category: Best Daily Game (Recurring Mechanic)
Secondary Category: Best Use of Reddit Content (Community-Powered Content Pipeline)
devvit upload- Clone the repository
- Run the upload command
- Open your test subreddit
- Launch the MemeJak menu item
- Turns Reddit’s daily content into an interactive habit
- Encourages repeat engagement every 24 hours
- Combines automation, deterministic gameplay, and community-driven content
- Lightweight, replayable, and highly extensible
Built for the Reddit Games Hackathon