An open API service indexing awesome lists of open source software.

https://github.com/h-yoshikawa44/ch-windbnb

devChallenges リポジトリ(出典:devChallenge(legacy) - Front-end Developer - Windbnb)
https://github.com/h-yoshikawa44/ch-windbnb

devchallenges emotion nextjs typescript

Last synced: 3 months ago
JSON representation

devChallenges リポジトリ(出典:devChallenge(legacy) - Front-end Developer - Windbnb)

Awesome Lists containing this project

README

          

Windbnb


Solution for a challenge from Devchallenges.io.




Demo


*The site is now closed, but this assignment was originally posted at `https://legacy.devchallenges.io/solutions/ftLx16ngH2CDg6hFPU76`.
(My assignment submission page at the time: `https://legacy.devchallenges.io/challenges/3JFYedSOZqAxYuOCNmYD`.)

## Table of Contents

- [Table of Contents](#table-of-contents)
- [Overview](#overview)
- [Desktop](#desktop)
- [Mobile](#mobile)
- [Built With](#built-with)
- [Features](#features)
- [How To Use](#how-to-use)
- [learned/improved](#learnedimproved)
- [Acknowledgements](#acknowledgements)
- [Contact](#contact)

## Overview
### Desktop
![overview - desktop](/screenshots/desktop.png)

---

![overview - desktop-drawer](/screenshots/desktop-drawer.png)

### Mobile
overview - mobile

---

overview - mobile-drawer

A page with a simple search function has been created.

Even though it was only one screen and a drawer menu, there were surprisingly many things to think about when implementing it, and I learned a lot.

### Built With

Base
- [Node.js](https://nodejs.org/):24.14.0
- [TypeScript](https://www.typescriptlang.org/):5.9.3
- [React](https://reactjs.org/):19.2.4
- [Next.js](https://nextjs.org/):16.1.6
- Pages Router

Other major libraries
- [postcss-preset-env](https://github.com/csstools/postcss-plugins/tree/main/plugin-packs/postcss-preset-env)
- [emotion](https://emotion.sh/)
- [emotion-icons](https://emotion-icons.dev/)
- [polished](https://polished.js.org/)
- [wicg-inert](https://github.com/WICG/inert)

## Features

This application/site was created as a submission to a DevChallenges challenge. The challenge was to build an application to complete the given user stories.

- [x] User story: I can see a list of properties
- [x] User story: I can see the property card with a name, rating, apartment type, and super host
- [x] User story: I can open the filter drawer
- [x] User story: I can filter properties by location and number of guests
- [x] User story: I can see the number of filtered items
- [x] User story: I can see pages following given designs
## How To Use

To clone and run this application, you'll need [Git](https://git-scm.com) and [Node.js](https://nodejs.org/en/download/) (which comes with [npm](https://www.npmjs.com/)) installed on your computer. From your command line:

```bash
# Clone this repository
git clone git@github.com:h-yoshikawa44/windbnb.git
or
git clone https://github.com/h-yoshikawa44/windbnb.git

# Install dependencies
npm install

# Run the app
npm run dev
```

## learned/improved
- The default value for the type attribute of the button is `type="submit "`.
- Pseudo-elements mean that they cannot be used with void elements.
- Ability to control element inactivity with the inert attribute.(Need to use polyfill for now.)
- Basic usage of ky.
- How to do synchronous data retrieval with React Query.
- How to transpile with `next-transpile-modules` when using ESM libraries in Next.js environment.
- How to use an external URL in next/image.
- How to use React Query in the Next.js environment.
- Difference between auto-fill and auto-fit in Grid Layout.

## Acknowledgements

- [Material UI](https://material-ui.com/)
- [React Query](https://react-query.tanstack.com/)
- [GitHub - WICG/inert - React doesn't play nice with inert property ](https://github.com/WICG/inert/issues/58)
- [GitHub - vercel/next.js - ky-universal throws error "Cannot use import statement outside a module"](https://github.com/vercel/next.js/discussions/21252)
- [【初心者でもわかる】疑似要素が表示されない時に確認する7つの事 & 確認方法](https://qiita.com/7note/items/7cb88dca241a22b54e5c)
- [ReactでInputフォームのEnterキーで処理を行う](https://blog.freks.jp/react-submit-with-enter/)
- [form 内の button 要素を押すと submit される理由](https://zenn.dev/phi/articles/form-submit-button-type-default)
- [UIにおける見えるけど利用できない非活性な領域の実装とinert属性について](https://standard.shiftbrain.com/blog/unavailable-inert-regions-and-inert-attribute)
- [CSSで、button要素とinput要素のテキストを美しく揃えるスタイルシートのテクニック](https://coliss.com/articles/build-websites/operation/css/vertical-text-alignment-in-buttons-and-inputs.html)
- [CSS Gridを使うならマスターしておきたいauto-fillとauto-fitの違い](https://parashuto.com/rriver/development/cssgrid-autofill-vs-autofit)

## Contact

- Website: [h-yoshikawa44.com](https://h-yoshikawa44.com)
- GitHub: [@h-yoshikawa44](https://github.com/h-yoshikawa44)
- X: [@yoshi44_lion](https://x.com/yoshi44_lion)