{"id":50763640,"url":"https://github.com/giacomogiudice/nishino","last_synced_at":"2026-06-11T12:31:04.646Z","repository":{"id":65372218,"uuid":"363409785","full_name":"giacomogiudice/nishino","owner":"giacomogiudice","description":"Jumping on the Jamstack bandwagon","archived":false,"fork":false,"pushed_at":"2025-08-13T18:27:55.000Z","size":1536,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-13T20:43:14.404Z","etag":null,"topics":["dmrg-algorithm","tensor-ne"],"latest_commit_sha":null,"homepage":"https://tensornet.work","language":"Svelte","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/giacomogiudice.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":"2021-05-01T12:54:34.000Z","updated_at":"2025-08-13T18:27:52.000Z","dependencies_parsed_at":"2024-11-24T11:24:20.664Z","dependency_job_id":"e705d6fe-9920-40f0-bab1-fe3618e72ee8","html_url":"https://github.com/giacomogiudice/nishino","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/giacomogiudice/nishino","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giacomogiudice%2Fnishino","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giacomogiudice%2Fnishino/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giacomogiudice%2Fnishino/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giacomogiudice%2Fnishino/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/giacomogiudice","download_url":"https://codeload.github.com/giacomogiudice/nishino/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giacomogiudice%2Fnishino/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34199516,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["dmrg-algorithm","tensor-ne"],"created_at":"2026-06-11T12:31:03.777Z","updated_at":"2026-06-11T12:31:04.639Z","avatar_url":"https://github.com/giacomogiudice.png","language":"Svelte","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DMRG Preprints\n\n[![CI][ci-img]][ci-url]\n[![Netlify Status][netlify-img]][netlify-url]\n\n[ci-img]: https://github.com/giacomogiudice/nishino/actions/workflows/publish.yml/badge.svg\n[ci-url]: https://github.com/giacomogiudice/nishino/actions/workflows/publish.yml\n[netlify-img]: https://api.netlify.com/api/v1/badges/8c331476-72ba-4331-9bf5-9800bea0f3b5/deploy-status\n[netlify-url]: https://app.netlify.com/sites/nishino/deploys\n\nA small reader for Tomotoshi Nishino's selection of papers on tensor networks.\n\nCheck out the [website](https://tensornet.work/).\n\n## Abstract\n\nPapers on tensor networks appear every day, but it is hard to keep track of them, since they span a vast number of [arXiv](http://arxiv.org) categories.\nFor almost 30 years, professor Tomotoshi Nishino has been keeping track of papers related to tensor networks appearing on arXiv, and posting them on his [website](http://quattro.phys.sci.kobe-u.ac.jp/dmrg/condmat.html).\n\nI wanted to make a simple reader for his website, which would include additional features like the abstract, a direct link to the PDF, and an arguably prettier formatting.\nThe reader needs to be always up-to-date, as fast as possible, and minimalistic.\n\n## Tech\n\nFor a seemingly simple task, there are remarkably many parts that come together.\n\n- 💾 [Redis](https://redis.io/) caching (with RedisJSON)\n- 🤖 API using [Netlify functions](https://www.netlify.com/products/functions/)\n- 📦 [Vite](https://vitejs.dev/) for bundling and frontend dev environment\n- ✏️ HTML templates with [PostHTML](https://github.com/posthtml/)\n- 🎲 Interactive components with [Svelte](https://svelte.dev/)\n- 🎓 Fast LaTeX rendering with [Katex](https://katex.org/)\n\nThe database is used to store all the papers from the original website, so it doesn't have to be queried every time some content is requested.\nEach entry in the database corresponds uniquely to a paper, and contains information about the paper such as the title, authors, abstract, etc (see below).\n\nThe API hosted on Netlify responds to requests of the form\n\n```\nhttps://tensornet.work/api/ids?\nhttps://tensornet.work/api/papers?\n\n```\n\nwith query parameters `year`, `update`, and `refresh`.\n\nIf `update` is `true`, the API will request the original website for the specified `year`, extract the `arxiv.org` links, and check if they are present in the database.\nIf not, it requests the information of the missing papers from the [arXiv API](http://arxiv.org/help/api/), and send them to the database.\nAdditionally, the `refresh` option updates all existing entries with data from the arXiv API.\n\nThe frontend components are written with Svelte.\nIt seemed to me the best choice, since it aimed at being a lightweight and fast reactive framework.\nIt's fairly concise but doesn't bring in too much framework bloat.\n\nI wanted all non-interactive components (i.e. HTML partials) to be included at build time, so I'm using the [posthtml-include](https://github.com/posthtml/posthtml-include) plugin.\nIt could be removed if the project moves to some framework like SvelteKit.\n\nFinally, Vite is an amazing bundler and comes with a great dev server.\nIt's a bit too opinionated on where the `index.html` files should be, so while a better solution awaits, there is an `about` folder floating around for the `/about/` route.\nUnfortunately, it's not static enough to go in the `public` folder.\n\n## Todo\n\nHere is a list of improvements\n\n- ~~Infinite scroll~~.\n- ~~Information like the journal ref. and the DOI are not updated.~~\n- Add a marker for Prof. Nishino's RGB rating.\n- Pre-render certain pages on the server or at build time. As long as the site is not very popular it makes no sense to pre-fetch the content of the landing page, but previous years can be optimized.\n- Try SvelteKit. It seems promising since it offers out-of-the-box SSR and integration with Netlify.\n\n## Development Setup\n\n### Frontend\n\nOnce you have cloned the package, you first want to install the dependencies with\n\n```bash\nnpm install\n```\n\nTo update packages to the latest non-major version, use `npm upgrade --save`.\nYou can then work on it locally and see the results with\n\n```bash\nnpm run dev\n```\n\nthis will start a local server using Vite, which supports fast reloading.\nIt will not actually connect to the database but will use a mockup.\nThis is useful for frontend development only.\n\nTo build the project, you can use\n\n```bash\nnpm run build\n```\n\nYou can find the output in the `dist/` folder.\n\n### Database setup\n\nFirst create a database on [Redis Labs](https://app.redislabs.com/) or any Redis provider (currently using [Upstash](https://upstash.com/)).\nYou can also host your own by installing `redis-server` and `redis-cli` or using the [docker image](https://redis.io/docs/stack/get-started/install/docker/).\nIt must have the **RedisJSON** module available and activated.\nSince the Netlify functions are hosted at `us-east-1`, it makes sense to choose somewhere near that as a location.\nTo develop locally, you can create a `.env` file on the root folder, with the following variable\n\n```\nREDIS_URL=redis://\u003cuser\u003e:\u003cpassword\u003e@\u003chostname\u003e:\u003cport\u003e\n```\n\nand add it to the Netlify environment with `netlify env:import .env` or import it manually with `netlify env:set REDIS_URL \u003cvalue\u003e`.\nYou can as well load it with `source .env` before running `npm run db-update`.\n\nIf you have the tool `redis-cli`, you can interactively log into the database from your terminal\n\n```\nsource .env\nredis-cli -u $REDIS_URL\n```\n\nThis can be useful, for example to empty the database.\n\n### Backend\n\nTo actually run the Lambda functions and test with the real dataset, you need to have the [Netlify CLI](https://docs.netlify.com/cli/get-started/) installed.\n\n```bash\nnpm install -g netlify-cli\n```\n\nOnce you have it, you can develop locally with\n\n```bash\nnetlify dev\n```\n\nSee also `npm run` and `netlify -h` for more commands.\n\n### GitHub Actions\n\nThe deployment of the site happens through a GitHub actions CI.\nThere are the following action workflows: `publish.yml` publishes the site on each push to master, while `preview.yml` generates a preview build on each PR.\nThere is also an `update.yml` which runs as a cron job to update the database on a monthly basis.\nThe secrets `NETLIFY_SITE_ID`, `NETLIFY_AUTH_TOKEN` and `REDIS_URL` need to be uploaded so that the runners have access to them.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgiacomogiudice%2Fnishino","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgiacomogiudice%2Fnishino","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgiacomogiudice%2Fnishino/lists"}