Anonymous 360° feedback tool for iHasco. Responses are written directly to an Excel file in your O365 environment via Power Automate. Colleague names are never stored in this repo — they're encoded into a shareable link generated by the built-in link generator. The form is deployed to an unguessable hashed URL on GitHub Pages.
HR admin visits the Generator:
https://you.github.io/360-feedback/{hash}/generate/
↓ (enters names + link lifetime, clicks Generate)
Gets a shareable link with an encoded ?id= token:
https://you.github.io/360-feedback/{hash}/?id=eyJuIjpb...
↓ (names and expiry window encoded in the token — never in source)
Colleague fills in the form on GitHub Pages
(link shows as expired if opened past its lifetime)
↓ (POST to Power Automate webhook — URL injected at build time, not in repo)
Power Automate writes a row to 360_feedback_dashboard.xlsx in your SharePoint/OneDrive
The {hash} in the URL is derived from your Power Automate webhook URL at build time — unguessable from the outside, but stable unless you rotate the secret.
| File | Purpose |
|---|---|
src/form-template.html |
The feedback form. Edit this to change questions or styling. Contains no secrets. |
src/generate.html |
The link generator form. HR admins use this to create shareable ?id= links. |
src/expired.html |
Error page shown when a feedback link is past its lifetime. |
power_automate_payload_reference.json |
Sample JSON payload. Paste into Power Automate's "Generate from sample" when building the flow. |
360_feedback_dashboard.xlsx |
Excel template. Upload once to SharePoint or OneDrive. Responses write here. |
.github/workflows/deploy.yml |
Build and deploy pipeline. Injects the webhook URL and publishes to GitHub Pages. |
skills/360-feedback-deployer/SKILL.md |
Context skill for AI assistants continuing work on this project. |
- Upload
360_feedback_dashboard.xlsxto a SharePoint document library or your OneDrive - Note the site/drive path — you'll need it in Step 2
- Make sure the file stays at this location permanently — Power Automate will write to it by path
The file contains a table named
FeedbackResponses. Do not rename this table or its columns or the Power Automate flow will break.
Note: Power Automate's Import Package requires a proprietary zip format. The flow must be built manually — it only takes about 5 minutes and has 3 steps.
2a. Create a new flow
- Go to make.powerautomate.com
- My Flows → + New flow → Instant cloud flow
- Name it
360 Feedback Receiver - Choose trigger: When an HTTP request is received → Create
2b. Add a Parse JSON step
- Click + New step → search for
Parse JSON→ select it - Set Content to
Bodyfrom the trigger's dynamic content panel - Click Generate from sample and paste the entire contents of
power_automate_payload_reference.jsonfrom this repo - Click Done — Power Automate will generate the schema automatically
2c. Add an Excel — Add a row into a table step
- Click + New step → search
Excel Online (Business)→ select Add a row into a table - Fill in the fields:
- Location: select your SharePoint site or OneDrive
- Document Library: the library where you uploaded the Excel file
- File: browse to
360_feedback_dashboard.xlsx - Table: select
FeedbackResponses
- Map each column to the matching field from the Parse JSON dynamic content:
| Excel column | Dynamic content value |
|---|---|
| Timestamp | Use expression: utcNow() |
| Subject Name | subject_name |
| Form ID | form_id |
| Authentic and ethical leadership | authentic_ethical_leadership |
| Emotional intelligence | emotional_intelligence |
| Inspire and influence | inspire_and_influence |
| Change management | change_management |
| Team building and collaboration | team_building_collaboration |
| Future focused, innovative, curious and courageous | future_focused_innovative |
| Decision making and problem solving | decision_making_problem_solving |
| Growth mindset with high self-awareness | growth_mindset |
| Cultural competence | cultural_competence |
| Communicates with impact | communicates_with_impact |
| Strengths | strengths |
| Development Areas | development |
form_idis the encoded token from the?id=URL parameter. All submissions from the same shared link carry the sameform_id, making it easy to filter responses by session in Excel.
2d. Save and get your webhook URL
- Click Save
- Go back to the When an HTTP request is received trigger step
- Copy the HTTP POST URL — this is your
PA_WEBHOOK_URL - Make sure the flow is turned on (flows default to off after creation)
Keep this URL private. It is the only security layer between the public internet and your Excel file.
- In this repo, go to Settings → Secrets and variables → Actions
- Click New repository secret
- Set:
- Name:
PA_WEBHOOK_URL - Value: the full webhook URL from Step 2
- Name:
- Go to Settings → Pages
- Set Source to:
Deploy from a branch - Set Branch to:
gh-pages// (root) - Save
The
gh-pagesbranch is created automatically on first deploy.
Either push any change to main, or go to:
Actions → Deploy 360 Feedback Form → Run workflow → Run workflow
Once complete, check the Actions log for your live URLs:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Generator URL: https://yourusername.github.io/360-feedback/a3f7c2d1e4b89f01/generate/
Form base URL: https://yourusername.github.io/360-feedback/a3f7c2d1e4b89f01/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Bookmark the Generator URL and share it with HR admins.
Use the Generator (/{hash}/generate/) to create feedback links:
- Enter the names of the people you're collecting feedback for
- Choose a link lifetime (7, 14, or 30 days)
- Click Generate link — a
?id=encoded link is produced - Copy and share the link with colleagues
The link encodes the colleague names and expiry window into a URL-safe token. Anyone opening the link after the lifetime window will see an expiry message and be asked to request a new link.
Edit src/form-template.html and push to main. The workflow redeploys automatically within ~1 minute.
If you ever need to invalidate the current URL (e.g. suspected abuse):
- In Power Automate, delete the HTTP trigger and re-add it — this generates a new URL
- Update the
PA_WEBHOOK_URLsecret in GitHub - Push any change to
mainto trigger a redeploy - The hashed path in the URL will change — share the new Generator URL from the Actions log
Old links will 404 automatically.
| Symptom | Likely cause | Fix |
|---|---|---|
| Submissions don't appear in Excel | Flow is turned off | Go to Power Automate and turn the flow on |
| Submissions don't appear in Excel | Excel table name changed | Ensure the table is named FeedbackResponses |
| Submissions don't appear in Excel | Wrong file path in flow | Re-check the Drive and File fields in the Add Row action |
| GitHub Pages shows 404 | Pages not configured | Check Settings → Pages → gh-pages branch |
| Actions log shows secret not set | Secret missing | Add PA_WEBHOOK_URL in Settings → Secrets → Actions |
| Form shows "Invalid link" or "No colleagues in link" | Missing or malformed ?id= token |
Use the Generator to create a new link |
| Form redirects to expired page | Link lifetime has passed | Use the Generator to create a new link |