{"id":26362806,"url":"https://github.com/floony7/design-site-project","last_synced_at":"2026-04-14T15:31:15.425Z","repository":{"id":235809690,"uuid":"791187187","full_name":"Floony7/design-site-project","owner":"Floony7","description":null,"archived":false,"fork":false,"pushed_at":"2024-05-01T08:15:49.000Z","size":3037,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-17T19:46:26.179Z","etag":null,"topics":["react-query","reactjs","styled-components","typescript"],"latest_commit_sha":null,"homepage":"https://digital-spaniel-pi.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Floony7.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-04-24T08:52:05.000Z","updated_at":"2024-05-01T08:15:52.000Z","dependencies_parsed_at":"2025-07-14T09:07:42.086Z","dependency_job_id":null,"html_url":"https://github.com/Floony7/design-site-project","commit_stats":null,"previous_names":["floony7/design-site-project"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Floony7/design-site-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Floony7%2Fdesign-site-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Floony7%2Fdesign-site-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Floony7%2Fdesign-site-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Floony7%2Fdesign-site-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Floony7","download_url":"https://codeload.github.com/Floony7/design-site-project/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Floony7%2Fdesign-site-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31803146,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T11:13:53.975Z","status":"ssl_error","status_checked_at":"2026-04-14T11:13:53.299Z","response_time":153,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["react-query","reactjs","styled-components","typescript"],"created_at":"2025-03-16T18:19:23.480Z","updated_at":"2026-04-14T15:31:15.405Z","avatar_url":"https://github.com/Floony7.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Digital Spaniel Design Agency - Rationale and Dev Choices\n\nRead on for background and decisions made in handling some of the requirements of the brief and what I'd do next / if had more time.\n\n## Project structure and styles\nFor this project, I wanted to use a mix of Styled Components and BEM where necessary. I created a `globalStyles` to store css color variables and other defaults.\nWith Styled Components, I scope the styles based on components that use them and source variables from `globalStyles`.\n\nI also use a couple of block and section Styled Components that can easily be imported in and made available where needed. These set widths and other styles such as margins and padding that are replicated throughout the page.\n\n## Responsive design\nResponsive design wasn't bakd in to the design, so I developed the site with desktop / larger viewport widths in mind. I used both media queries (max-width) and a custom hook, `useViewportWidth` for responsiveness.\nThe hook came in handy for creating the hamburger menu and in rendering the responsive fallback for the testimonial carousel.\nEssentially, I use this hook to get the latest viewport width then conditionally render based on that width (in the above cases a mobile nav and a fallback for the carousel).\n\n## Data fetching\nThe data for the Testimonials section is sourced from a `api.json` file hosted locally. For this, I used React Query as this is one of the best ways in React for fetching data, caching and tracking loading states. As the brief also mentioned showing the use of a state manager, I coded the data fetching and storage for testimonials in a `TestimonialsContext`. Using Context feels right for a simple application like this. In a more complex job I would reach for React Toolkit, as it is simple and effective to implement out of the box.\n\n## Carousel\nThe carousel has been brought in via a package and isn't quite what the design specified. It also started to degrade in quality at lower viewport widths, so I render it a fallback for these devices.\nIf I had more time I would be able to develop a custom carousel, or utilise an existing component for this. Given the time and the fact the testimonials section is so important to this test, I have included a working carousel.\n\n## Additional time - what I would do\nAside from any tasks I have stated above, I would also:\n- pay more attention to error handling with respect to data fetching\n- perhaps use Suspense for fallback rendering and lazy loading\n- use Flexbox in places where I've used Grid so that responsiveness is baked in (less need for media queries)\n- design better customised components for the Carousel, Masonry and perhaps the Mobile Nav\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffloony7%2Fdesign-site-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffloony7%2Fdesign-site-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffloony7%2Fdesign-site-project/lists"}