mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-05-05 20:56:13 -05:00
Beans
This commit is contained in:
parent
6a396f5654
commit
f6493f2507
6
.beans.yml
Normal file
6
.beans.yml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
beans:
|
||||
path: .beans
|
||||
prefix: sendou.ink-
|
||||
id_length: 4
|
||||
default_status: todo
|
||||
default_type: task
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# sendou.ink-2oby
|
||||
title: Fix handleRadioGroupKeyDown in CommandPalette
|
||||
status: todo
|
||||
type: bug
|
||||
created_at: 2026-01-11T08:58:55Z
|
||||
updated_at: 2026-01-11T08:58:55Z
|
||||
parent: sendou.ink-6eko
|
||||
---
|
||||
|
||||
The handleRadioGroupKeyDown function is not working. Location: app/components/layout/CommandPalette.tsx:151
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
---
|
||||
# sendou.ink-6eko
|
||||
title: Desktop sidebar and mobile tabs layout
|
||||
status: in-progress
|
||||
type: epic
|
||||
priority: normal
|
||||
created_at: 2026-01-11T08:58:29Z
|
||||
updated_at: 2026-01-11T09:19:14Z
|
||||
---
|
||||
|
||||
## Why
|
||||
|
||||
The previous layout had several limitations holding back the player experience:
|
||||
|
||||
1. **Poor mobile UX** - Navigation wasn't optimized for mobile players
|
||||
2. **Hard to navigate** - No global search, sidebar only appeared on front page making it difficult to find features
|
||||
3. **Slow path to matches** - Competitive players had too many clicks to join matches or check their tournament status
|
||||
4. **No foundation for scheduling** - Future features like team scheduling and league match scheduling need a persistent navigation structure
|
||||
5. **Streams not visible** - Community streams weren't highlighted, missing opportunity to showcase active players
|
||||
|
||||
## Goals
|
||||
|
||||
- Make it easy for competitive players to get into matches fast (1-click access to active matches/tournaments)
|
||||
- Provide persistent navigation across all pages via sidebar (desktop) and bottom tabs (mobile)
|
||||
- Add global search via command palette to quickly find users, teams, organizations, and tournaments
|
||||
- Lay foundation for upcoming features: friend group quick-join, team scheduling, league scheduling
|
||||
- Better highlight community content like streams
|
||||
|
||||
## What's been built
|
||||
|
||||
- **Desktop**: Fixed sidebar with user profile, tournament calendar, friends list, streams + top menu bar with category dropdowns
|
||||
- **Mobile**: Bottom tab bar with modal panels for menu, friends, tournaments, and user profile
|
||||
- **Command palette**: Global search (Cmd/Ctrl+K) for users, teams, organizations, tournaments
|
||||
- **Breadcrumb navigation**: Context-aware page hierarchy
|
||||
- **Quick match access**: Tournament and SendouQ match status prominently displayed
|
||||
|
||||
## Completion criteria
|
||||
|
||||
All child tickets resolved.
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# sendou.ink-gk34
|
||||
title: Improve tournament search relevance
|
||||
status: todo
|
||||
type: task
|
||||
created_at: 2026-01-11T08:58:56Z
|
||||
updated_at: 2026-01-11T08:58:56Z
|
||||
parent: sendou.ink-6eko
|
||||
---
|
||||
|
||||
For tournament search results, when there are equally good matches, show tournaments closest to current date first. Example: searching 'In The Zone' should show newest tournament first. Location: app/features/search/routes/search.ts:86
|
||||
11
.beans/sendou.ink-h8l0--fix-mobilenav-padding-on-android.md
Normal file
11
.beans/sendou.ink-h8l0--fix-mobilenav-padding-on-android.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# sendou.ink-h8l0
|
||||
title: Fix MobileNav padding on Android
|
||||
status: todo
|
||||
type: bug
|
||||
created_at: 2026-01-11T08:58:54Z
|
||||
updated_at: 2026-01-11T08:58:54Z
|
||||
parent: sendou.ink-6eko
|
||||
---
|
||||
|
||||
The mobile navigation lacks proper padding on Android devices. iOS displays correctly. Location: app/components/MobileNav.tsx:35
|
||||
11
.beans/sendou.ink-iam7--replace-placeholder-logo.md
Normal file
11
.beans/sendou.ink-iam7--replace-placeholder-logo.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# sendou.ink-iam7
|
||||
title: Replace placeholder logo
|
||||
status: todo
|
||||
type: task
|
||||
created_at: 2026-01-11T08:58:55Z
|
||||
updated_at: 2026-01-11T08:58:55Z
|
||||
parent: sendou.ink-6eko
|
||||
---
|
||||
|
||||
Replace the placeholder logo with final logo asset when ready. Location: app/components/layout/index.tsx:259
|
||||
11
.beans/sendou.ink-j4zp--remove-and-redirect-u-page.md
Normal file
11
.beans/sendou.ink-j4zp--remove-and-redirect-u-page.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# sendou.ink-j4zp
|
||||
title: Remove and redirect /u page
|
||||
status: todo
|
||||
type: task
|
||||
created_at: 2026-01-11T08:58:56Z
|
||||
updated_at: 2026-01-11T08:58:56Z
|
||||
parent: sendou.ink-6eko
|
||||
---
|
||||
|
||||
Deprecate and remove the /u page. Add redirect to new location. Location: app/features/user-search/routes/u.tsx:44
|
||||
10
.beans/sendou.ink-r6ry--streams-integration-in-sidebar.md
Normal file
10
.beans/sendou.ink-r6ry--streams-integration-in-sidebar.md
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
# sendou.ink-r6ry
|
||||
title: Streams integration in sidebar
|
||||
status: todo
|
||||
type: epic
|
||||
created_at: 2026-01-11T09:18:00Z
|
||||
updated_at: 2026-01-11T09:18:00Z
|
||||
---
|
||||
|
||||
Display live Splatoon community streams in the sidebar. Data source and implementation details TBD.
|
||||
11
.beans/sendou.ink-s23a--implement-hover-menu-switching.md
Normal file
11
.beans/sendou.ink-s23a--implement-hover-menu-switching.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# sendou.ink-s23a
|
||||
title: Implement hover menu switching
|
||||
status: todo
|
||||
type: task
|
||||
created_at: 2026-01-11T08:58:55Z
|
||||
updated_at: 2026-01-11T08:58:55Z
|
||||
parent: sendou.ink-6eko
|
||||
---
|
||||
|
||||
After clicking to open a menu, moving cursor to another menu item should show that menu's items. Menu should close on outside click or Escape key. Location: app/components/layout/TopNavMenus.tsx:14
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# sendou.ink-svz2
|
||||
title: Inline function in NotificationPopover
|
||||
status: todo
|
||||
type: task
|
||||
created_at: 2026-01-11T08:58:55Z
|
||||
updated_at: 2026-01-11T08:58:55Z
|
||||
parent: sendou.ink-6eko
|
||||
---
|
||||
|
||||
Refactor NotificationPopover by inlining the separate function that makes no sense as standalone. Location: app/components/layout/NotificationPopover.tsx:40
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# sendou.ink-vj1n
|
||||
title: Fix organizations icon in CommandPalette
|
||||
status: todo
|
||||
type: bug
|
||||
created_at: 2026-01-11T08:58:55Z
|
||||
updated_at: 2026-01-11T08:58:55Z
|
||||
parent: sendou.ink-6eko
|
||||
---
|
||||
|
||||
The organizations category uses wrong icon. Should use the same icon as AnythingAdder uses for organizations. Location: app/components/layout/CommandPalette.tsx:42
|
||||
11
.beans/sendou.ink-vmid--define-navigation-menu-categories.md
Normal file
11
.beans/sendou.ink-vmid--define-navigation-menu-categories.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# sendou.ink-vmid
|
||||
title: Define navigation menu categories
|
||||
status: todo
|
||||
type: task
|
||||
created_at: 2026-01-11T08:58:54Z
|
||||
updated_at: 2026-01-11T08:58:54Z
|
||||
parent: sendou.ink-6eko
|
||||
---
|
||||
|
||||
Replace placeholder categories in TopNavMenus with actual navigation structure. Location: app/components/layout/TopNavMenus.tsx:13
|
||||
11
.beans/sendou.ink-y2wo--remove-and-redirect-t-page.md
Normal file
11
.beans/sendou.ink-y2wo--remove-and-redirect-t-page.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# sendou.ink-y2wo
|
||||
title: Remove and redirect /t page
|
||||
status: todo
|
||||
type: task
|
||||
created_at: 2026-01-11T08:58:56Z
|
||||
updated_at: 2026-01-11T08:58:56Z
|
||||
parent: sendou.ink-6eko
|
||||
---
|
||||
|
||||
Deprecate and remove the /t page. Add redirect to new location. Location: app/features/team/routes/t.tsx:51
|
||||
11
.beans/sendou.ink-y9e1--update-sidebar-cache-shape.md
Normal file
11
.beans/sendou.ink-y9e1--update-sidebar-cache-shape.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# sendou.ink-y9e1
|
||||
title: Update sidebar cache shape
|
||||
status: todo
|
||||
type: task
|
||||
created_at: 2026-01-11T08:58:55Z
|
||||
updated_at: 2026-01-11T08:58:55Z
|
||||
parent: sendou.ink-6eko
|
||||
---
|
||||
|
||||
The cached value matches previous usage pattern. Update to match the new usage requirements. Location: app/features/sidebar/routes/sidebar.ts:44
|
||||
|
|
@ -32,7 +32,6 @@ import { SideNavLink } from "./SideNav";
|
|||
type SidebarData = Awaited<ReturnType<typeof sidebarLoader>> | undefined;
|
||||
type PanelType = "closed" | "menu" | "friends" | "tourneys" | "you";
|
||||
|
||||
// xxx: seems to lack padding on Android
|
||||
export function MobileNav({ sidebarData }: { sidebarData: SidebarData }) {
|
||||
const [activePanel, setActivePanel] = React.useState<PanelType>("closed");
|
||||
const user = useUser();
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ const STORAGE_KEY = "command-palette-search-type";
|
|||
const SEARCH_TYPE_ICONS: Record<SearchType, string> = {
|
||||
users: "u",
|
||||
teams: "t",
|
||||
organizations: "associations", // xxx: something correct here
|
||||
organizations: "associations",
|
||||
tournaments: "calendar",
|
||||
};
|
||||
|
||||
|
|
@ -148,7 +148,6 @@ function CommandPaletteContent({ onClose }: { onClose: () => void }) {
|
|||
setSearchType(value as SearchType);
|
||||
};
|
||||
|
||||
// xxx: not working
|
||||
const handleRadioGroupKeyDown = (e: React.KeyboardEvent) => {
|
||||
if (e.key === "Enter") {
|
||||
e.preventDefault();
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@ export function useNotifications() {
|
|||
return { notifications, unseenIds };
|
||||
}
|
||||
|
||||
// xxx: probably makes no sense as a separate function
|
||||
export function notificationPopoverClassName(notificationsLength: number) {
|
||||
return clsx(styles.popoverContainer, {
|
||||
[styles.noNotificationsContainer]: notificationsLength === 0,
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ import { SendouPopover } from "../elements/Popover";
|
|||
import { Image, WeaponImage } from "../Image";
|
||||
import styles from "./TopNavMenus.module.css";
|
||||
|
||||
// xxx: placeholder categories
|
||||
// xxx: make it so that you can view menu with one click, click -> move cursor to another menu item should show the items of that menu
|
||||
const NAV_CATEGORIES = [
|
||||
{
|
||||
name: "competition",
|
||||
|
|
|
|||
|
|
@ -256,7 +256,6 @@ function SiteTitle() {
|
|||
<Flipper flipKey={isFrontPage ? "front" : "other"}>
|
||||
<div className={styles.siteTitle}>
|
||||
<Flipped flipId="site-logo">
|
||||
{/** xxx: placeholder logo */}
|
||||
<Link to="/" className={styles.siteLogo}>
|
||||
S
|
||||
</Link>
|
||||
|
|
|
|||
|
|
@ -83,7 +83,6 @@ async function searchByType({
|
|||
}));
|
||||
}
|
||||
case "tournaments": {
|
||||
// xxx: this needs more fancy logic like if i search for "In The Zone", it should show the newest in the zone first
|
||||
const tournaments = await TournamentRepository.searchByName({
|
||||
query,
|
||||
limit,
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ export const loader = async (_args: LoaderFunctionArgs) => {
|
|||
const tournamentMatchStatus = resolveTournamentMatchStatus(user.id);
|
||||
|
||||
return {
|
||||
// xxx: cache the right shape
|
||||
tournaments: [
|
||||
...tournamentsData.participatingFor,
|
||||
...tournamentsData.organizingFor,
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@ export const handle: SendouRouteHandle = {
|
|||
}),
|
||||
};
|
||||
|
||||
// xxx: deprecate page
|
||||
export default function TeamSearchPage() {
|
||||
const { t, i18n } = useTranslation(["team"]);
|
||||
const [inputValue, setInputValue] = React.useState("");
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ export const meta: MetaFunction = (args) => {
|
|||
});
|
||||
};
|
||||
|
||||
// xxx: deprecate page
|
||||
export default function UserSearchPage() {
|
||||
const { t } = useTranslation(["user"]);
|
||||
const [searchParams, setSearchParams] = useSearchParams();
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user