{"id":22912882,"url":"https://github.com/demindiro/fcgi-soup","last_synced_at":"2025-04-01T11:25:15.848Z","repository":{"id":137321370,"uuid":"152424914","full_name":"Demindiro/fcgi-soup","owner":"Demindiro","description":"A simple FCGI webserver with a focus on blogging.","archived":false,"fork":false,"pushed_at":"2019-05-25T19:15:00.000Z","size":194,"stargazers_count":1,"open_issues_count":5,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-07T06:26:56.591Z","etag":null,"topics":["blog","website"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Demindiro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2018-10-10T13:05:33.000Z","updated_at":"2019-10-29T02:30:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"2a0944d3-2f52-44eb-8fbe-0a88d68fc17d","html_url":"https://github.com/Demindiro/fcgi-soup","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Demindiro%2Ffcgi-soup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Demindiro%2Ffcgi-soup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Demindiro%2Ffcgi-soup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Demindiro%2Ffcgi-soup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Demindiro","download_url":"https://codeload.github.com/Demindiro/fcgi-soup/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246629672,"owners_count":20808369,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["blog","website"],"created_at":"2024-12-14T04:30:02.853Z","updated_at":"2025-04-01T11:25:15.828Z","avatar_url":"https://github.com/Demindiro.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"FCGI Soup\n=========\nA simple webserver made for bloggers with embedded devices such as the old Raspberry Pi.\n\n\nFeatures\n--------\n * Static file serving.\n * Blog posts/articles.\n * Basic templating.\n \n\nStatic file serving\n-------------------\nBasically anything that doesn't have `blog/` as subpath is a static file.\nIf the URI refers to a folder, `index.html` is loaded.\nIf the file couldn't be read, 404 is returned.\n\n\nArticles\n--------\nOn startup, the file `blog.list` is loaded. This file contains entries for each blog post.\nEach entry has the following format: `\"\u003ctitle\u003e\" \"\u003cauthor\u003e\" \"\u003cyear\u003e[-\u003cmonth\u003e[-\u003cday\u003e[ hour[:minute]]]]\" \"\u003cfile\u003e\" \"\u003curi\u003e\"`.\n\n\nBasic templating\n----------------\nIt is easy to customize webpages with the Cinja templating library. The following templates\nare used by FCGI soup:\n\n- `main.html`\n  All HTML pages are wrapped in this template. There is only one string variable, `BODY`, which\n  represents the page being wrapped.\n- `article\\_list.html`: This page is used to list all articles. It has a single variable, `ARTICLES`,\n   which is a list. Each item of the list is a dictionary with `URI`, `TITLE` and `DATE` as variables.\n   To iterate over the list, you must use a `for` loop.\n- `article.html`\n  This is the wrapper for all blog posts. There are a number of interesting variables:\n  - `PREV_URI` and `NEXT_URI`: these are strings that link to the previous and next article.\n  - `PREV_TITLE` and `NEXT_TITLE`: the titles of the previous and next article, respectively.\n  - `TITLE`: the title of the current article`\n  - `AUTHOR`: the name of the author\n  - `DATE`: the date the article was created (or well, what is listed in the blog list, anyways).\n    It is currently formatted as \"%Y-%M-%D %h:%m\".\n  - `BODY`: the body of the article (unparsed).\n  - `COMMENTS`: a list of comments on the article. These only include the top-level comments.\n  - `comment`: a function (or rather, a template) that takes a single comment as parameter.\n- `comment.html`: A template for a single comment.\n  - `AUTHOR`: the name of the author of the comment.\n  - `DATE`: the date when the comment was posted.\n  - `BODY`: the contents of the comment.\n  - `ID`: the ID of the comment.\n  - `REPLIES`: a list containing replies to this comment.\n  - `comment`: a function to parse the replies.\n- `error.html`: A template that can be used in case something not nice occured.\n  - `STATUS`: the status code of the response.\n  - `MESSAGE`: a message describing the error.\n\nFor examples, see the `www/` directory.\n\nTo post a comment, a form with the following parameters must be posted:\n- `author`\n- `body`\n- (optionally) `reply-to`\n\n\nUsing FCGI Soup\n===============\nYou will need a proxy of some sort that supports (F)CGI. e.g. Apache has `mod_fcgi`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdemindiro%2Ffcgi-soup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdemindiro%2Ffcgi-soup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdemindiro%2Ffcgi-soup/lists"}