Skip to content
Merged
Changes from 20 commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
04ffc83
First parse at blog post
caydnn Oct 8, 2025
f1a205d
minor comments
caydnn Oct 8, 2025
a1f7d87
added in initial web dev section
mEp3ii2 Oct 12, 2025
896f080
Add overview of the PyScript Briefcase and Toga Dependencies
kavi2du Oct 14, 2025
3c19714
Added to Web Dev Optimisation
JMah007 Oct 16, 2025
fe8096e
Add Lessons Learnt and Future work sections
caydnn Oct 18, 2025
94aed66
Addition to PyScript Briefcase and Toga Dependencies
caydnn Oct 18, 2025
30064db
Lessons learnt paragraph and individual comment sections
caydnn Oct 18, 2025
7fc341b
Add future pyscript work
caydnn Oct 18, 2025
7b472a3
Lessons learnt for Caydn
caydnn Oct 18, 2025
0125304
Added part for the lessons learnt section
mEp3ii2 Oct 18, 2025
21ee5db
Added lesson learned
vt37 Oct 19, 2025
2055fda
Added jaeden lessons learnt and added future work for briefcase
JMah007 Oct 20, 2025
a756c84
Add lessons learnt (Callum). Add content to 'Future Work' and 'Toga C…
Stringer90 Oct 20, 2025
ef7e6a5
Add 'Toga Web Testing' section content
Stringer90 Oct 21, 2025
67c534c
Added draft PR in future works of Toga web testing
vt37 Oct 21, 2025
c2ae937
Add resource links for PyScript Briefcase and Toga Dependencies
kavi2du Oct 22, 2025
9b1ace0
Added resource links for Web Dev Optimisation deliverable
JMah007 Oct 22, 2025
a052ad7
Add lessons learned
kavi2du Oct 23, 2025
ae8a906
Minor change
kavi2du Oct 23, 2025
34fc15d
Add semester 1 blog post link
caydnn Oct 24, 2025
cdd9ace
Update content/news/buzz/2025-curtin-capstone-year-end-blog/contents.lr
caydnn Oct 24, 2025
56634dd
Merge branch 'lektor' of https://github.com/caydnn/beeware.github.io-…
caydnn Oct 24, 2025
f34e9bb
Update content/news/buzz/2025-curtin-capstone-year-end-blog/contents.lr
caydnn Oct 24, 2025
0eb4a9a
Merge branch 'lektor' of https://github.com/caydnn/beeware.github.io-…
caydnn Oct 24, 2025
5c971a4
Update content/news/buzz/2025-curtin-capstone-year-end-blog/contents.lr
caydnn Oct 24, 2025
fb8dd18
Add intro paragraph for future work
caydnn Oct 24, 2025
2059ee9
Merge branch 'lektor' of https://github.com/caydnn/beeware.github.io-…
caydnn Oct 24, 2025
d788e39
Update content/news/buzz/2025-curtin-capstone-year-end-blog/contents.lr
JMah007 Oct 24, 2025
4281bc4
Add web template future work
caydnn Oct 24, 2025
82b1b31
Merge branch 'lektor' of https://github.com/caydnn/beeware.github.io-…
caydnn Oct 24, 2025
f2ff3f7
Add links to pyscript paragraph
caydnn Oct 24, 2025
b1fe800
Update 'Toga Web Testing' section to become a single paragraph
Stringer90 Oct 24, 2025
e749f8e
'Learnt' to 'Learned'. Update 'Callum' section of 'Lessons Learned'
Stringer90 Oct 24, 2025
a050569
Update Caydn lessons learned
caydnn Oct 24, 2025
3a7ed06
Update Lessons Learned: Callum
Stringer90 Oct 24, 2025
c3949ec
Update Lessons Learned: Callum
Stringer90 Oct 24, 2025
f4192d4
Update lesson learned
vt37 Oct 24, 2025
2c38fca
Addressed "Briefcase Contributions" comments
vt37 Oct 24, 2025
896840d
Updated lessons learned section for better clarity
mEp3ii2 Oct 25, 2025
3b08ab2
Changed lessons learnt to paragraph
JMah007 Oct 26, 2025
87d6ecf
Merge branch 'lektor' of https://github.com/caydnn/beeware.github.io-…
JMah007 Oct 26, 2025
43b3d6c
Break kavi's lessons into paragraphs
caydnn Oct 26, 2025
ddb4959
Remove semester one contributions as sem1 post linked above
caydnn Oct 26, 2025
4d0d8ed
Minor change
kavi2du Oct 26, 2025
bf8dfe1
Update content/news/buzz/2025-curtin-capstone-year-end-blog/contents.lr
caydnn Oct 27, 2025
619a6c0
Update content/news/buzz/2025-curtin-capstone-year-end-blog/contents.lr
caydnn Oct 27, 2025
0855fe1
Update content/news/buzz/2025-curtin-capstone-year-end-blog/contents.lr
caydnn Oct 27, 2025
926112d
Update future work section for web testing.
Stringer90 Oct 30, 2025
019f054
Update insertion system future work
caydnn Oct 31, 2025
3b4989b
Future works for Web Dev Optimisation changed to a paragraph
JMah007 Oct 31, 2025
1aae529
Final copy edits.
freakboy3742 Nov 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions content/news/buzz/2025-curtin-capstone-year-end-blog/contents.lr
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
title: 2025 Curtin University Capstone Project
---
author: Curtin Capstone Team
---
body:

Since February, a team of final year students from [Curtin University](https://www.curtin.edu.au) has been collaborating with the BeeWare Project as part of a capstone project for their degrees. This is a summary of the work they have completed.

# Curtin Capstone

Capstone is the final year project undertaken by students across all computing disciplines at Curtin University, including Computer Science, Software Engineering, Cyber Security, and Information Technology. It allows students the opportunity to work in teams on real-world projects in collaboration with industry partners, gaining practical experience and professional exposure before graduating.

This year our team has had the exciting opportunity to contribute to BeeWare for our Capstone project.

Meet the Team:

- Kavidu Abeykoon Mudiyanselagedara ([kavi2du](https://github.com/kavi2du)); Information Technology
- Callum Horton ([Stringer90](https://github.com/Stringer90)); Software Engineering
- Caydn Lee ([caydnn](https://github.com/caydnn)); Software Engineering
- Jaeden Mah ([JMah007](https://github.com/JMah007)); Computer Science
- Mitchell Pontague ([mEp3ii2](https://github.com/mEp3ii2)); Software Engineering
- Veronica Taniputra ([vt37](https://github.com/vt37)); Cyber Security

In the first semester, our team gained exposure to the BeeWare ecosystem through tackling a variety of small bug fixes within Briefcase and Toga, creating widgets for the web backend in Toga and completing small research tasks into the mechanisms within the BeeWare tools. After this, the team split off into pairs to plan out larger deliverable contributions that would add or changes features within BeeWare.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could add a link to the first semester blog post here.

It is these deliverables that the team worked on in the second semester.

## What We’ve Worked On This Semester

### Toga Web Testing

This semester, we delivered a functional prototype of a testing mechanism for Toga’s Web backend. This prototype addresses the problem outlined in the prior issue, as detailed [here](https://github.com/beeware/toga/issues/3545). The problem was straightforward: there wasn’t a practical, end-to-end way to run automated tests against Toga web apps running in the browser. Our prototype addresses this by introducing a structured communication bridge between the backend and the frontend, widget proxies, and DOM probes. This enables end-to-end tests that tests both widget logic and rendered UI.
At this stage, the work serves as a proof-of-concept approach rather than a finished product. It demonstrates that the core approach works reliably, though additional features and improvements remain to be implemented. A detailed handover report for the current solution and future works can be found [here](https://github.com/beeware/toga/issues/3545). Our draft PR which contains our work can be found [here](https://github.com/beeware/toga/pull/3728).

### Briefcase Web Development Optimisations

This semester, we have successfully laid the groundwork for web platform development mode support in briefcase by making the `dev` command platform-aware and implementing virtual environment management. We refactored the core DevCommand architecture by introducing platform-specific `DevCommand` subclasses like `StaticWebDevCommand` to handle platform-dependent workflows (PR #2419).Next, we implemented virtual environment management by introducing the VirtualEnvironment context manager tool, which provides isolated, configurable virtual environments for development mode, which addressed dependency conflicts while maintaining compatibility with existing Briefcase patterns. Within the managed virtual environment, local app assets are installed in editable mode which create the .pth files to make the assets discoverable by the server. We've started work on the StaticWebDevCommand with proper venv creation and path management specific to web development, app execution remains a planned next step that has been marked with the UnsupportedCommandError error. This work establishes the foundation for exposing the app assets to the web server allowing the live-reload workflow ultimately speeding up the web developement process. These are outlined in the original proposal that you can check out here to see an outline of our next steps for those wanting to carry on where we've left off.

To access the related resources for this deliverable:
- View the discussion post [here](https://github.com/beeware/briefcase/discussions/2282)
- View the Briefcase issue ticket [here](https://github.com/beeware/briefcase/issues/2334)
- View making of the dev command platform aware pull request [here](https://github.com/beeware/briefcase/pull/2419)
- View the virtual environment manager tool pull request [here](https://github.com/beeware/briefcase/pull/2420)
- View the implementation for editable installs pull request [here](https://github.com/beeware/briefcase/pull/2498)

### PyScript Briefcase and Toga Dependencies

This semester, we worked on redesigning the Briefcase static web build pipeline to implement a deterministic asset insertion system which replaced template-based asset management. The new system enables Toga and other toolkits to embed their configuration files and front-end resources directly into wheel packages. The web template received a redesign which established specific areas for insertion. The previous restrictions prevented Toga and other toolkits from taking full control of their front-end operations while working independently from Briefcase. The new system separates tasks while making maintenance easier and enables toolkits to manage their front-end components, with Toga now owning its own PyScript version, PyScript configuration and Shoelace HTML script.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This semester, we worked on redesigning the Briefcase static web build pipeline to implement a deterministic asset insertion system which replaced template-based asset management. The new system enables Toga and other toolkits to embed their configuration files and front-end resources directly into wheel packages. The web template received a redesign which established specific areas for insertion. The previous restrictions prevented Toga and other toolkits from taking full control of their front-end operations while working independently from Briefcase. The new system separates tasks while making maintenance easier and enables toolkits to manage their front-end components, with Toga now owning its own PyScript version, PyScript configuration and Shoelace HTML script.
This semester, we worked on redesigning the Briefcase static web build pipeline to [implement a deterministic asset insertion system](https://github.com/beeware/briefcase/pull/2442) which replaced template-based asset management. The new system enables Toga and other GUI toolkits to embed their configuration files and front-end resources directly into wheel packages. The web template [received a redesign](https://github.com/beeware/briefcase-web-static-template/pull/21) which established specific areas for insertion. The previous restrictions prevented Toga and other toolkits from taking full control of their front-end operations while working independently from Briefcase. The new system separates tasks while making maintenance easier and enables toolkits to manage their front-end components, with [Toga now owning its own PyScript version, PyScript configuration and Shoelace HTML script](https://github.com/beeware/toga/pull/3666).


To access the related resources for this deliverable:
- View the [issue ticket](https://github.com/beeware/briefcase/issues/2337)
- View the Toga pull request [here](https://github.com/beeware/toga/pull/3666)
- View the Briefcase pull request [here](https://github.com/beeware/briefcase/pull/2442)
- View the briefcase-web-static-template pull request [here](https://github.com/beeware/briefcase-web-static-template/pull/21)
- View the documentation pull request [here](https://github.com/beeware/briefcase/pull/2511)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As above - better to keep these as inline links.

Suggested change
To access the related resources for this deliverable:
- View the [issue ticket](https://github.com/beeware/briefcase/issues/2337)
- View the Toga pull request [here](https://github.com/beeware/toga/pull/3666)
- View the Briefcase pull request [here](https://github.com/beeware/briefcase/pull/2442)
- View the briefcase-web-static-template pull request [here](https://github.com/beeware/briefcase-web-static-template/pull/21)
- View the documentation pull request [here](https://github.com/beeware/briefcase/pull/2511)

## Other Contributions

Below is a summary of contributions either made during the first semester or in down time during the second semester.

### Briefcase Contributions

- PR [#2198](https://github.com/beeware/briefcase/pull/2198): Add boolean question (feature)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- PR [#2198](https://github.com/beeware/briefcase/pull/2198): Add boolean question (feature)
- PR [#2198](https://github.com/beeware/briefcase/pull/2198): Add an API for asking boolean questions.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also - no need to clarify feature/bugfix in this list.

- PR [#2103](https://github.com/beeware/briefcase/pull/2203): Add XML content escaping filter to cookiecutter.py (feature)
- PR [#2199](https://github.com/beeware/briefcase/pull/2199): Add catch exception when deleting JDK (bugfix)
- PR [#2229](https://github.com/beeware/briefcase/pull/2229): Accept other changelog name and extension (feature)
- PR [#2201](https://github.com/beeware/briefcase/pull/2201): Add ``--app`` option to briefcase build/package (feature)
- PR [#2214](https://github.com/beeware/briefcase/pull/2214): Add ``--app`` option to briefcase create/update (feature)
- PR [#2236](https://github.com/beeware/briefcase/pull/2236): Normalise contribution docs with Toga (documentation)
- PR [#54](https://github.com/beeware/briefcase-windows-VisualStudio-template/pull/54): Use XML content escaping filter to Visual Studio template. (bugfix)

### Toga Contributions

- PR [#3259](https://github.com/beeware/toga/pull/3259): Add web screenshots (documentation)
- PR [#3466](https://github.com/beeware/toga/pull/3466): Fix button click handling in Toga Web backend to correctly trigger event (bugfix)
- PR [#3338](https://github.com/beeware/toga/pull/3338): DateInput (web widget)
- PR [#3405](https://github.com/beeware/toga/pull/3405): TimeInput (web widget)
- PR [#3362](https://github.com/beeware/toga/pull/3362): ScrollContainer (web widget)
- PR [#3425](https://github.com/beeware/toga/pull/3425): Table (web widget) (work in progress)
- PR [#3402](https://github.com/beeware/toga/pull/3402): Selection (web widget)
- PR [#3527](https://github.com/beeware/toga/pull/3527): Slider (web widget)
- PR [#3788](https://github.com/beeware/toga/pull/3788): MultilineTextInput (web widget)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of duplicating the list of first semester work, you can link to the earlier blog post.


## Lessons Learnt
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Lessons Learnt
## Lessons Learned


This year with BeeWare has marked many valuable lessons taught outside of the class environment. Each of us have now made significant contributions to an open-source project while meeting deadlines and attending weekly standup meetings. This process has allowed us to develop our skills in numerous ways. Below each of us will comment our individual lessons.

### Kavidu:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You'll need to add a blank line between paragraphs to ensure this renders as paragraphs.


- Working with BeeWare was my first professional experience outside of university. This was a huge opportunity for me to have hands-on exposure to real-world software development work within open-source environments. I gained experience working with large community-based codebases through issue tracking and pull request management while teaming up with developers who used different time zones and technical expertise.
- The experience helped me develop better abilities to work with others while improving my skills in team collaboration. The combination of weekly stand-ups and code reviews and asynchronous teamwork helped me develop skills to explain technical concepts simply and receive feedback positively while creating code that others could understand and expand. I developed better skills in Python programming, testing and I learned to create testable code that other developers could use to extend the project.
- Working with BeeWare provided me with essential knowledge about open-source software engineering through its combination of technical and collaborative aspects. The development of good software requires designers to create intentional systems while they must communicate effectively to build tools which enable others to continue improving the project after their contribution ends.

### Mitchell:

One of the most valuable lessons from BeeWare came while implementing a virtual environment context manager for Briefcase. During the planning and initial development, I was too focused on how this would work for the web development platform rather than on the actual design of the tool itself. My supervisor pointed out that this PR had applications in other areas within Briefcase and should be designed with those considerations in mind. I had been thinking in terms of "what does the web platform need?" when I should have been asking "what capability does the system need?" This misunderstanding affected my initial timeline and resulted in a much longer development cycle than intended, but it taught me something far more valuable. The real insight was that development shouldn't be task-specific but tool-specific. When working on something, it's not about what works for today's problem but what tool you're building that will work for any problem that emerges tomorrow. Good design means separating mechanism from policy: your tool provides the *how*, and each caller decides the *where*, *when*, and *why*. The goal isn't to predict every use case but to build tools that others can use as-is, without modification. When someone needs virtual environment management six months from now in a completely different context, they shouldn't have to change your code—they should just be able to call it with their parameters and move on. Build it once so it works everywhere, not once per use case. Ultimately, the best code is the code that works today but rather the code that's still working unchanged a year from now.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great content; but could be broken into a couple of paragraphs (as with Kavi - make sure there's a blank line between paragraphs)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated


### Veronica:

- As this was my first experience on a large, open-source project, I learned how the workflow fits together, for example, navigating existing code, writing clear issues and PRs, and contributing changes with clear commits and messages.
- Regular stand-ups, shared planning, and pairing on tasks taught me how to work effectively in a team, building good communication, and collaboration.
- I've improved my Python skills and gained real experience with Pytest and Playwright while working on the Toga Web Testing prototype. Most importantly, I learned how to design a cross-process system that bridges a pytest test runner to an app running in the browser.

### Jaeden:

- Beginning with limited python knowledge increased the learning curve for me however by reflecting at the end of this journey I can see the difference in skills I have gained.
- I am more confident and familiar now working on a project alongside other software engineers discussing ideas whilst maintaining professional communication practises via weekly standup calls and email.
- Working on Briefcase has taught me to simplify my code more. After regular code reviews from Russell, I realised my code was always more complicated than necessary and could often be simplified either by using in built python functions or functions already defined somewhere in the codebase that I wasnt aware of.

### Callum:

I learned the importance of communication when working on the same codebase as others. Regular discussions and updates were essential to avoid duplicated work and ensure that design decisions were aligned, while also making sure my changes fit seamlessly with others’ work. I also learned the importance of documentation and visibility of work, as writing clear documentation and sharing progress helped others understand the project’s direction and made it easier for future contributors to build on our work.

### Caydn:

- This year has taught me how to work effectively within both a small team and a large open-source project. It's been very eye opening navigating the expectations and workflows that come with contributing to a community-driven codebase.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As with Jaeden - this should be paragraphs not bullet points.

- I've gained confidence and appreciation for modular architecture through working on the PyScript insertion system. I'm looking forward to see how BeeWare continues to make use of and expand on this system.
- Collaborative feedback and reviews from Russell, Malcolm, and the team, especially Kavidu, have undoubtedly improved our code quality and allowed me to grow as a software engineer.


## Future work

- In Toga, `web/src/toga_web/static/toga.css` will need to be converted to an insert.
- Eg: `web/src/toga_web/deploy/inserts/briefcase.css~css`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's two options here:

  1. An introductory paragraph with a tight list of bullet points; or
  2. A couple of paragraphs describing in high level terms with links to relevant outstanding PRs/designs.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added an opening paragraph at line 98. Did you need me to expand on it? :)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So - that introductory paragraph is kind of half way to what I intended.

My main issue is that the bullet point list is inconsistent with the rest of the text. After a lot of narrative descriptions, we've got a set of bullet points reads a bit like a first draft for the paragraphs that should be here. If the future work was as simple as "here are the four issues that need to be resolved" or "here are the 3 PRs that need to be completed", then a bullet list might be appropriate. Here we have a combination of short descriptions and links; some of which is duplicating content that are covered in more detail in the handover reports.

Rather than duplicate the handover reports, this further work section should be giving a really high level summary of the work to be done, and then referring to those handover reports for more details.

(Also some of the todo items have already been done :-) )

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alrighty that makes sense, I'll see if I can get the team to update their sections for this. A few of us have exams tomorrow but we should be able to change this soon.

For the Insertion system changes, would you like a similar approach but with a link to the remaining issue ticket instead of a handover report?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alrighty that makes sense, I'll see if I can get the team to update their sections for this. A few of us have exams tomorrow but we should be able to change this soon.

No problems - your exams should absolutely take priority. If we can get this wrapped up by the end of the week, that would be ideal.

For the Insertion system changes, would you like a similar approach but with a link to the remaining issue ticket instead of a handover report?

I'm not sure I follow you're referring to here. My original comment was intended as highlighting an issue with the entire "future work" section, not a flag on this specific bullet point. If there's a handover report, link to it, with maybe a very brief summary of the nature of the outstanding work; if the future work is just a ticket or two, link to those.

To avoid content duplication, it might also be appropriate to remove references to the handover reports in the sections above, and consolidate them down in this future work section.

- Issue [#3822](https://github.com/beeware/toga/issues/3822)

- In Toga, continued development of web backend testing.
- Issue [#3545](https://github.com/beeware/toga/issues/3545)
- Draft PR [#3728](https://github.com/beeware/toga/pull/3728)

- In Briefcase, the following needs to be implemented for the `Dev Commmand`
- .pth File Parsing Utility (for making the editable installed packages directly accessible to the server)
- Allow the dev environment to support 3rd party package support
- Extend the editable install workflow to desktop platforms increasing developement workflow speed
- Implement a --live/--reload flag to automatically re-bundle changed .py files and refresh the browser
- Issue [#2334](https://github.com/beeware/briefcase/issues/2334)